假设我有queries.txt。
queries.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尝试将它们作为文件名找到。我做错了什么?
答案 0 :(得分:7)
在这里,你只需要:
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
的标准输入来避免UUOC - 无用使用queries.txt
- 奖励。它使用-I %
选项指定替换文本在命令行中的位置。使用-e
选项意味着如果模式是,例如--help
,则不会遇到(GNU)grep
将其视为参数(因此打印其帮助消息)的问题)。
答案 1 :(得分:1)
grep -e
选项将模式字符串作为参数。 -f
将参数视为包含模式的文件的文件名。