grep でパターンをファイルから読み込むには? [NT]
grep で正規表現にマッチした部分だけ抽出するには? で grep について書いたので、その続き。
複数のパターンで grep を実行したい場合、スクリプトを書かなくても -f オプションを用いればよい。これを使うと、パターンをファイルから読むことが出来る。
pattern.txt というファイルを次のように記述する。
CLOSE_WAIT
LI.*G
検索対象のファイル list.txt が次の内容であるとする。
Active Connections
Proto Local Address Foreign Address State
TCP 127.0.0.1:4111 127.0.0.1:4112 ESTABLISHED
TCP 127.0.0.1:4112 127.0.0.1:4111 ESTABLISHED
TCP 127.0.0.1:4114 127.0.0.1:4115 ESTABLISHED
TCP 127.0.0.1:4115 127.0.0.1:4114 ESTABLISHED
TCP 127.0.0.1:5152 0.0.0.0:0 LISTENING
TCP 127.0.0.1:5152 127.0.0.1:4113 CLOSE_WAIT
TCP 127.0.0.1:9089 0.0.0.0:0 LISTENING
TCP 127.0.0.1:10110 0.0.0.0:0 LISTENING
このとき、
grep -f pattern.txt hoge.txtと実行すると、
TCP 127.0.0.1:5152 0.0.0.0:0 LISTENING
TCP 127.0.0.1:5152 127.0.0.1:4113 CLOSE_WAIT
TCP 127.0.0.1:9089 0.0.0.0:0 LISTENING
TCP 127.0.0.1:10110 0.0.0.0:0 LISTENING
を得られる。
尚、-F を指定しなければパターンファイルの各行は正規表現として扱われる。そのため、LI*G が LISTENING に該当するので、CLOSE_WAIT だけでなく、LISTENING の行も表示されている。