如何使用 xargs 传递要由 grep 搜索的名称列表?

如何使用 xargs 传递要由 grep 搜索的名称列表?

我有一个包含名称的文本文件(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

相关内容