如何运行 grep 多次解析输入流中的参数?

如何运行 grep 多次解析输入流中的参数?

"foo", "bar"想象一下输入管道是一个类似于CSV 格式的单词列表。

然后有这个文件或其他东西,我想测试它是否包含"foo"(1)或"bar"(2),例如:

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

我想在输出中获得这两个 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 的某些实现还允许使用连字符-来表示标准输入。

我还使用了 Printf(它打印由换行符分隔的“foo”和“bar”),因为它比 Echo 更便携。 Bash Echo 需要将该-e标志解释\n为换行符。

相关内容