0

我了解到,在使用findwith时xargs,建议对带有空格的文件名使用-print0and参数才能正常工作。-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 aandb b b而不是a, a, a, b, b, b.

我的问题是为什么上面的例子没有任何问题?我认为它会查找, a, a, a,b并返回b.btext

我错过了什么?

4

1 回答 1

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.

于 2011-03-18T19:41:08.813 回答