grepでAND検索、OR検索

こんにちは、さるまりんです。

今日はgrepコマンドです。

grepはファイル内の文字列検索で利用されます。

grep [検索文字列] [ファイル名]

これで複数の文字列のAND検索とOR検索する方法です。

AND検索

AND検索は結果を|(パイプ)でつなぐことで絞り込み実現します。

grep [文字列1] ファイル名 | grep [文字列2]

上記で文字列1と文字列2を含む行が抽出されます。

例えば以下のようなファイルaaa.txtがあったとします。

090-xxxx-yyyy
090-1111-aaaa
080-aaaa-1111
070-0000-bbbb
06-aaaa-bbbb
06-1111-bbbb
03-bbbb-1111
078-cccc-0000

電話番号みたいな文字列が各行に記録されています。

この中から06aaaaの両方を含む行を抜き出すには以下のようにします。

$ grep 06 aaa.txt | grep aaaa
06-aaaa-bbbb

06aaaaの両方を含む1行が抽出されました。

OR検索

OR検索はgrep-eオプションを使います。

grep -e [文字列1] -e [文字列2] [ファイル名]

上記で文字列1か文字列2のいずれかか両方を含む行を抽出します。

AND検索の例で使ったファイルaaa.txtから070080090のいずれかを含む行を抽出してみます。

$ grep -e 070 -e 080 -e 090 aaa.txt 
090-xxxx-yyyy
090-1111-aaaa
080-aaaa-1111
070-0000-bbbb

上記の4行が抽出されました。

同様のことはegrepコマンドを使っても実現できます。

検索したい文字列を|(パイプ)でつないで列挙します。

egrep '文字列1|文字列2' ファイル名

上記の例と同様のことをegrepで実行するとこうなります。

$ egrep '070|080|090' aaa.txt
090-xxxx-yyyy
090-1111-aaaa
080-aaaa-1111
070-0000-bbbb

grep(egrep)は正規表現を使ってとても便利に利用できます。

正規表現、真剣に勉強しなくては。

読んでくださってありがとうございます。

それではまた!