22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

grep のちょっとイカした使い方

Posted at

前置き

前のお手軽! grep findのときに面倒だったので、grepの引数は省略しました。

もったいないので、こちらでその続きです。前の記事と合わせると少し便利です。

本題

全部は紹介しませんが、たまに便利なものだけ紹介します。
また、LinuxのGNU Grepで試しているので、*BSD, MacOSではどうなるかわかりません。

-H ファイル名出力を強制

ファイル1個だけだとファイル名が出ません。

$ (echo moge; echo hoge; echo muga) > foo.c # リテラルで改行出すやり方わからないのでこれで勘弁して。
$ grep hoge foo.c
hoge

-Hでファイル一個でもファイル名がつきます。--with-filenameという別名もあります。

$ (echo moge; echo hoge; echo muga) > foo.c
$ grep -H hoge foo.c
foo.c:hoge

-n 行番号も出力する

-nで行番号もつきます。私は-nHをつけるのを好みます。

$ (echo moge; echo hoge; echo muga) > foo.c
$ grep -nH hoge foo.c
foo.c:2:hoge

-l むしろマッチしたファイル名だけ表示

$ for f in {foo,bar,baz}.c; do (echo moge; echo hoge; echo muga) > $f; done
$ grep -l *.c
bar.c
baz.c
foo.c

-L またはマッチしないファイル名だけ表示

$ for f in {foo,bar,baz}.c; do (echo moge; echo hoge; echo muga) > $f; done
$ touch poo.c
$ grep -L *.c
poo.c

-v マッチしない行を表示(条件反転)

$ for f in {foo,bar,baz}.c; do (echo moge; echo hoge; echo muga) > $f; done
$ grep -v hoge *.c
bar.c:moge
bar.c:muga
baz.c:moge
baz.c:muga
foo.c:moge
foo.c:muga

-An,-Bn,-Cn マッチした行とその前後を表示(--after-context, --before-context, --context)

-Anは、マッチした行と、そのn行下まで表示する。:が付いているのがマッチした行、-が付いているのが-Anで追加して表示されている行。

$ for f in {foo,bar,baz}.c; do (echo moge; echo hoge; echo muga) > $f; done
$ grep -A2 -nH moge *.c
bar.c:1:moge
bar.c-2-hoge
bar.c-3-muga
--
baz.c:1:moge
baz.c-2-hoge
baz.c-3-muga
--
foo.c:1:moge
foo.c-2-hoge
foo.c-3-muga

-Bnは、マッチした行と、そのn行上まで表示する。:が付いているのがマッチした行、-が付いているのが-Bnで追加して表示されている行。

$ for f in {foo,bar,baz}.c; do (echo moge; echo hoge; echo muga) > $f; done
$ grep -B2 -nH muga *.c
bar.c-1-moge
bar.c-2-hoge
bar.c:3:muga
--
baz.c-1-moge
baz.c-2-hoge
baz.c:3:muga
--
foo.c-1-moge
foo.c-2-hoge
foo.c:3:muga

-Cnは、マッチした行と、その前後n行ずつを表示する。:が付いているのがマッチした行、-が付いているのが-Cnで追加して表示されている行。

$ for f in {foo,bar,baz}.c; do (echo moge; echo hoge; echo muga) > $f; done
$ grep -C1 -nH hoge *.c
bar.c-1-moge
bar.c:2:hoge
bar.c-3-muga
--
baz.c-1-moge
baz.c:2:hoge
baz.c-3-muga
--
foo.c-1-moge
foo.c:2:hoge
foo.c-3-muga

ユースケース

コードから気になる箇所をgrepで見つけたけど途中で改行されていた、なんてときには-Anは便利です。

その他

時間があれば、以下に目を通しておくとよいです。

$ grep --help
$ man grep
$ info grep
22
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?