grepコマンド(文字列検索)の使い方

文字列検索で利用するgrepコマンドの使い方を解説します。よく活用するオプション、他のコマンドとの合わせ技など紹介します。

書式

grep [オプション] 検索パターン [ファイル...]

基本正規表現と拡張正規表現

基本正規表現(BRE: basic-regexp)拡張正規表現(ERE: extended-regexp) の違いを意識する必要があります。

grepは、 デフォルトだと基本正規表現 になります。 -Eオプション を利用すると 拡張正規表現 で検索できます。

正規表現 コマンド
基本正規表現 grep sed
拡張正規表現 grep -E egrep sed -r awk

例えば、a または b のいずれかを表す正規表現は a|b になりますが、これは拡張正規表現でないと利用できません。

利用例

単一ファイルから検索

app/Http/Kernel.php というファイルで HttpKernel という文字列を含む行を表示

$ grep "HttpKernel" app/Http/Kernel.php 
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel

複数ファイルから検索

パスを複数指定

app/Http/Kernel.phpapp/Console/Kernel.php から検索

$ grep "app" app/Http/Kernel.php  app/Console/Kernel.php 

ディレクトリ指定

app/Httpというディレクトリ配下の全てのファイルHttpKernel という文字列を含むファイルがあれば、 ファイル名 & 行番号 & 行内容 を表示

$ grep -nr "HttpKernel" app/Http
app/Http/Kernel.php:5:use Illuminate\Foundation\Http\Kernel as HttpKernel;
app/Http/Kernel.php:7:class Kernel extends HttpKernel

除外ディレクトリ指定

--exclude-dir で検索除外するディレクトリを指定できます。

$ grep -nr xxx . --exclude-dir={dist, .nuxt}

コマンド出力結果から検索

コマンド出力結果 から nginx という文字列を含む行を表示

$ ps -ef|grep "nginx"

複数キーワードのどちらかを含む
( -e )

コマンド出力結果 から nginx または mysql という文字列を含む行を表示

$ ps -ef|grep -E "nginx|mysql"

or

$ ps -ef|grep -e "nginx" -e "mysql"

検索キーワードを含まないファイル
( -L )

-Lオプション を指定すると 含まない という条件になります。

$ grep –Lr 検索キーワード ディレクトリ

上記例ですと、該当ディレクトリ配下に存在するファイルから、検索キーワードを含まないファイルを抽出できます。

指定キーワードを除外して検索
( -v )

-vオプション で除外キーワードを指定できます。

$ cat test.txt 
1 aaaa
2 bbbb
3 aaaa
4 cccc
5 dddd
6 @aaaa
$ 
$ grep aaaa test.txt 
1 aaaa
3 aaaa
6 @aaaa
$ 
$ grep aaaa test.txt | grep -v @aaaa
1 aaaa
3 aaaa

ファイル名だけ表示する
( -l )

-lオプション を指定すると検索結果がファイル名だけになります。

$ grep –l 検索キーワード ディレクトリ

ファイル名を表示しない
( -h )

-hオプション を指定すると検索結果にファイル名を表示しなくなります。

$ grep –h 検索キーワード ディレクトリ

大文字小文字区別せずに
( -i )

test.txtというファイルhttp という文字列を含む行を 大文字小文字区別せずに検索 して表示

$ grep -i "http" test.txt 

前後行も表示
( -B -A )

test.txtというファイル44 という文字列を含む行と その前後の行 を表示

$ cat test.txt 
1111
2222
3333
4444
5555
6666
7777
$ grep -n -B 2 -A 1 "44" test.txt 
2-2222
3-3333
4:4444
5-5555

固定文字列で検索

正規表現で検索されるので、以下のように全行ヒットしてしまいます。

$ cat test.txt 
3333
44.*44
5555
$ grep ".*" test.txt 
3333
44.*44
5555

エスケープすれば良いのですが、見づらくなります。

$ grep "\.\*" test.txt 
44.*44

-Fオプション を利用すると、固定文字で検索できます。

$ grep -F ".*" test.txt 
44.*44

xargsとの応用

カレントディレクトリ配下の全てのファイルaaa という文字列を含む ファイル一覧sed に渡し置換する

$ grep -rl "aaa"  . | xargs sed -i -e 's/aaa/bbb/g'

ハイライトをつけて表示

$ grep --color=always "aaa" test.txt
【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。