假设我有 queries.txt。
查询.txt:
cat
dog
123
现在我想使用它们是使用 grep 在 myDocument.txt 中查找行的查询。
cat queries.txt | xargs grep -f myDocument.txt
myDocument 有类似的行
cat
i have a dog
123
mouse
它应该返回前 3 行。但事实并非如此。相反,grep 尝试将它们作为文件名查找。我究竟做错了什么?
在这里,您只需要:
grep -f queries.txt myDocument.txt
这会导致grep
从文件中读取正则表达式queries.txt
,然后将它们应用于myDocument.txt
.
在该xargs
版本中,您实际上是在编写:
grep -f myDocument.txt cat dog 123
如果您绝对必须使用xargs
,那么您需要编写:
xargs -I % grep -e % myDocument.txt < queries.txt
这cat
通过将标准输入从queries.txt
. 它使用该-I %
选项来指定替换文本在命令行中的位置。使用该-e
选项意味着,如果模式是--help
,您将不会遇到(GNU)grep
将其视为参数(并因此打印其帮助消息)的问题。
grep 选项将-e
模式字符串作为参数。-f
将参数视为包含模式的文件的文件名。