grepの-lオプションと-Lオプション
grepの-lオプションと-Lオプション。マニュアルを見ると、それぞれ以下のように説明されている。
-l, --files-with-matches 通常の出力はしません。その代わりに、grepを普通に実行した際に、何らかの検索結果を表示する ような入力ファイルの名前を列挙します (訳注: すなわち、-lオプションを指定すると、-vオプシ ョンを同時に指定しない場合は、パターンにマッチする文字列を含む行が存在するファイルの名前 を列挙するということです)。 個々のファイルに対する走査は、最初のマッチで終了します。 (-l オプションは POSIX で規定されています) -L, --files-without-match 通常の出力はしません。その代わりに、grepを普通に実行した際に、何の検索結果も表示しないよ うな入力ファイルの名前を列挙します (訳注: すなわち、-Lオプションを指定すると、-vオプショ ンを同時に指定しない場合は、パターンにマッチする文字列を含む行がまったく存在しないファイ ルの名前を列挙するということです) 。個々のファイルに対する走査は、最初のマッチで終了しま す。
-lと-Lは反対の意味を持つようだ。それでは、-Lと-lv、-lと-Lvは同じ意味なのか、という質問をときどき受けることがある。先に答えを言うと、4つは全て異なる意味を持つ。それぞれの動作を確認しよう。
- grep -l pattern file1 file2 file3...
- パターンにマッチする行が1行以上あるファイルの名前を表示する。
- grep -lv pattern file1 file2 file3...
- パターンにマッチしない行が1行以上あるファイルの名前を表示する。
- grep -L pattern file1 file2 file3...
- パターンにマッチする行が1行もないファイルの名前を表示する。言い換えると、全ての行がパターンにマッチしないファイルの名前を表示する。
- grep -Lv pattern file1 file2 file3...
- パターンにマッチしない行が1行もないファイルの名前を表示する。言い換えると、全ての行がパターンにマッチするファイルの名前を表示する。
$ cat file1 a b c $ cat file2 a a a $ cat file3 b b b $ grep -l a file1 file2 file3 file1 file2 $ grep -lv a file1 file2 file3 file1 file3 $ grep -L a file1 file2 file3 file3 $ grep -Lv a file1 file2 file3 file2
ここまで読んでくださった方は、-l、-lv、-L、-Lvの違いをおわかりになられたでしょうか。