了解白色空间和xargs

时间:2011-03-18 19:32:08

标签: grep xargs cat

我了解到将findxargs一起使用时,建议使用带有空格的文件名的-print0-0参数才能正常工作。

现在我有以下名为patterns的文件,其中包含以下内容

a a a
b b b

我的文件名为text,内容如下

a
b b b

当我运行以下命令时,

cat patterns| xargs -ipattern grep pattern text

我得到了

b b b

这意味着xargs知道要查找a a ab b b而不是aaab,{{ 1}},b

我的问题是为什么上面的例子中没有任何问题?我认为它会查找baaabb并返回b中的两行}。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

-i-I将其从使用(可能引用的)以空格分隔的字符串更改为行。引用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.

   --replace[=replace-str]
   -i[replace-str]
          This option is a synonym for -Ireplace-str if replace-str  is  specified,  and  for
          -I{} otherwise.  This option is deprecated; use -I instead.

当您在默认情况下使用文件名(即非-I)模式时,您需要保护空格,制表符,并且(并非像这样的文件名一直是个好主意)新行;因此-0