grep

作成日 : 2010-06-13
最終更新日 :

grep とは、テキストファイルを指定してそのファイルの中の文字列を検索するコマンドである。 grep という名称は、ラインエディタ ed のコマンド g/re/p に由来する。 その意味は「global regular expression print(ファイル全体から/正規表現に一致する行を/表示する)」で略号になっている。

単独での grep

オプションの説明

-i

大文字・小文字の区別を無視する

-c

行数を表示する。通常の出力はしない。

-v

マッチの意味を逆にして、マッチしない行を抜き出して表示する。

-l

-v オプションを同時に指定しない限り、パターンにマッチする文字列を含む行が存在するファイルの名前を列挙する

-L

-v オプションを同時に指定しない限り、パターンにマッチする文字列を含む行が全く存在しないファイルの名前を列挙する

2つのディレクトリにあるファイルで共通の名前を持つもの

GPT-4o にチャットで聞いてみた例である。 ls と grep コマンドを組み合わせて使用する方法は次の通り。


  # ディレクトリ1とディレクトリ2のパスを指定
  dir1="/path/to/directory1"
  dir2="/path/to/directory2"
  
  # 共通のファイル名を表示
  ls "$dir1" | grep -F -x -f <(ls "$dir2" )
  

合わせ技で使う grep

grep は単独ではもちろん、他のコマンドとの合わせ技でさらに力を発揮する。

実例1: xargs との合わせ技(1)

xargs, find コマンドと合わせて、 あるディレクトリからサブディレクトリを渡り歩いてすべての html ファイルをみつけ、 その中から特定の単語があるかを調べる、というときに使える。

$ find . -name \*html -print | xargs grep "hogehoge"

実例2: xargs との合わせ技(2)

実例1では grep をパイプの後段で渡していたが、パイプの前段で使う例を挙げる。 "hogehoge"が含まれていないファイルにそれぞれに関して、wc を行う。

$ grep -L "hogehoge" *.html | xargs wc

grep の -L オプションは、 hogehoge が出てこないファイルを一覧表示する、 という意味である。

Windows では

Windows では、 GNU utilities for Win32 がある。なお残念ながらNT 版 UNIX-like toolsでは、 いくつか実装されていないオプションがある (egrep における -L など)。

grep 4兄弟

grep の働きをするコマンドには、ほかにも egrep や fgrep、rgrep がある。 手元の Ubuntu 20.04 の man ページには、これらはそれぞれ grep -E 、grep -F 、grep -r と同じである、 と解説されている。

まりんきょ学問所UNIX 手習い > grep


MARUYAMA Satosi