grepに関する世界観です。
grepはテキストファイルからキーワード(任意の文字列)を含む行、あるいは正規表現のパターンにマッチする行だけを抽出するコマンド。grep, sed, awkとして検索・置換の三人衆と知られている。
grepはパイプを使ってストリームの中のパターンにマッチする行を抽出するために使うことができます。データベースで言えばフィルターのようなものです。
find /usr/src/linux | grep fs
こんなこともできる。
grep -rn "Linus" /usr/src/linux
-rオプションはディレクトリの中のすべてのファイルに対するサブディレクトリまで含めた再帰的な検索、-nオプションは行番号を表示。
あるいは、findとxargsを組み合わせて、すべての*.cファイルから文字列を検索するには以下のようにする。
find /usr/src/linux -name "*.c" | xargs grep -l "Linus"
-lオプションはファイル名を表示。
ちなみに、正規表現を使用しない場合はfgrepで高速検索ができる。またegrepは拡張正規表現を使う(grepの-Eオプションと同じ)。
2023.01.22編集
grepでAND検索を行うには、複数のgrepをパイプで繋ぎ合わせればいい。
たとえば、「A」と「B」と「C」が含まれる行を抽出するには、以下のようにする。
grep A hoge.txt | grep B | grep C
これに対して、OR検索を行うには、-eオプションを指定する。
たとえば、「D」あるいは「E」が含まれる行を抽出するには、以下のようにする。
grep -e D -e E hoge.txt
詳しくは以下のページが参考になる。
2023.01.22
grepやsedで使う正規表現については正規表現を参照のこと。