假设我有 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将参数视为包含模式的文件的文件名。