grepコマンドを使いこなして、膨大なソースコードから特定の文字列を探せるようになりたいです。

  • 文字列を検索する
例えば、こんなディレクトリ構成でこんなファイル配置で、こんなファイル内容だったとします。
~/grepdir/a/a.txt (中身:pavement1234)
~/grepdir/b/b.txt (中身:pavement9876)
~/grepdir/c/c.txt (中身:PAVEMENT1234)
~/grepdir/d/d.txt (中身:pavement)
~/grepdir/e/e.txt (中身:1234)
grepdirにcdします。
$ cd grepdir
*./*に対してpavementという文字列を検索します。するとこんな感じに表示されます。
$ grep pavement */*

a/a.txt:pavement1234
b/b.txt:pavement9876
d/d.txt:pavement
  • 次に*/*に対してpavementという文字列を大文字・小文字の区別をせず検索します。
すると大文字のPAVEMENTも検索に出てきます。
$ grep -i pavement */*

a/a.txt:pavement1234
b/b.txt:pavement9876
c/c.txt:PAVEMENT1234
d/d.txt:pavement
  • */*に対してpavementという文字列を大文字・小文字の区別をせず検索し、検索結果に対して更に1234という文字列を検索します。
するとこんな感じ。
$ grep -i pavement */* | grep 1234

a/a.txt:pavement1234
c/c.txt:PAVEMENT1234
  • さて、いろいろなオプションを試してみます。
-rはディレクトリを対象とする検索。
$ grep -r pavement *

a/a.txt:pavement1234
b/b.txt:pavement9876
d/d.txt:pavement
-vは不一致行を検索。
$ grep -v pavement */*

a/a.txt:
c/c.txt:PAVEMENT1234
d/d.txt:
e/e.txt:1234
-nは行Noを表示。
$ grep -n pavement */*

a/a.txt:1:pavement1234
b/b.txt:1:pavement9876
d/d.txt:1:pavement
-Eは拡張正規表現で検索。
$ grep -E 'p|t' */*

a/a.txt:pavement1234
b/b.txt:pavement9876
d/d.txt:pavement
-eは正規表現で検索。
$ grep -e p -e t */*

a/a.txt:pavement1234
b/b.txt:pavement9876
d/d.txt:pavement
-Lは該当しないファイルを検索。
$ grep -L pavement */*

c/c.txt
e/e.txt
IMG_20190127_170929

スポンサードリンク