3

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

4

2 回答 2

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通过将标准输入从queries.txt. 它使用该-I %选项来指定替换文本在命令行中的位置。使用该-e选项意味着,如果模式是--help,您将不会遇到(GNU)grep将其视为参数(并因此打印其帮助消息)的问题。

于 2013-09-07T00:49:18.027 回答
1

grep 选项将-e模式字符串作为参数。-f将参数视为包含模式的文件的文件名。

于 2013-09-07T00:14:34.913 回答