入力ストリームの引数を解析するためにgrepを複数回実行する方法は?

入力ストリームの引数を解析するためにgrepを複数回実行する方法は?

"foo", "bar"入力パイプラインがCSV形式の単語リストであると想像してください。

"foo"次に、このファイルのようなものがあり、ここに(1)または"bar"(2)が含まれているかどうかをテストしたいと思います。たとえば、次のようになります。

echo "foo\nbar" | grep input.txt $0

出力から次の2つのgrep操作の組み合わせ結果を取得したいと思います。

grep "foo" input.txt
grep "bar" input.txt

例:

input.txt = "foo1\nfoo2n\bar\n123"
output = "foo1\nfoo2n\bar\n"

すべてのパラメータを検索する場合、何回実行されるかは問題ありません。

答え1

-fファイルから読み取られたフラグをファイル名として使用できます。/dev/stdinこれは標準入力を指します。

printf '%s\n' "foo" "bar" | grep -f /dev/stdin input.txt 

Grepの一部の実装では、ハイフンを使用して-標準入力を表すこともできます。

私はEchoよりも移植性が良いので、Printf(「foo」と「bar」を改行で区切って印刷しました)を使用しました。 Bash Echoは-eこのフラグを\n改行文字として解釈する必要があります。

関連情報