[Linux] grep -f - で標準出力を grep に検索パターンとして渡す



grep に普通にパイプで渡すと、その入力からパターンを検索することになります。

mint@ubuntu:~/greptest$ echo abc ; echo cde; echo efg
abc
cde
efg
mint@ubuntu:~/greptest$ (echo abc ; echo cde; echo efg) | grep c
abc
cde

パイプで検索語句を渡したい場合は、 -f - を使います。-f は検索パターンをファイルで指定するオプションです。

mint@ubuntu:~/greptest$ cat text.txt 
abc
cde
efg
mint@ubuntu:~/greptest$ echo c | grep text.txt -f -
abc
cde

検索パターンを複数入力することも出来るようです。

mint@ubuntu:~/greptest$ (echo b ; echo d) | grep text.txt -f -
abc
cde

似たようなことをxargsを使っても出来ます。ただし、複数の検索パターンにヒットすると、結果が複数回出てしまう点が異なっています。また、二重引用符で囲む必要があったりなかったりと細かい違いもあるかと思います。-e は検索パターンを明示的に指定するオプションです。

mint@ubuntu:~/greptest$ (echo b ; echo d) | xargs -n 1 grep text.txt -e
abc
cde