"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
为换行符。