我有一个包含名称的文本文件(nameslist.txt
),我想使用它们读取它们cat
并将结果通过管道传输xargs
到命令grep
,以便grep
检查它在目标文件()中收到的每个名称是否存在targetfile.txt
。
假设targetfile.txt
包含大量名称,其中某些名称可能包含在内nameslist.txt
。
下面我应该在xargs
和之间grep
以及grep
和之间添加什么./targetfile.txt
?
cat ./nameslist.txt | xargs grep ./targetfile.txt
谢谢
答案1
您可以使用-I
来指示xargs
使用特定字符或字符序列作为参数的占位符。来自man xargs
:
-I replace-str
Replace occurrences of replace-str in the initial-arguments with
names read from standard input. Also, unquoted blanks do not
terminate input items; instead the separator is the newline
character. Implies -x and -L 1.
一个常见的选择{}
是
cat nameslist.txt | xargs -I {} grep {} targetfile.txt
或(无需使用 cat)
< nameslist.txt xargs -I {} grep {} targetfile.txt
xargs
但是,假设您的列表每行只有一个名称,那么您根本不需要这里 - 可以从文件中grep
读取模式列表(或带有选项的固定字符串):-F
grep -F -f nameslist.txt targetfile.txt