使用xargs从文档中获取行

时间:2013-09-07 00:07:32

标签: unix grep xargs

假设我有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尝试将它们作为文件名找到。我做错了什么?

2 个答案:

答案 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将参数视为包含模式的文件的文件名。