Понимание пробелов и xargs - PullRequest
0 голосов
/ 18 марта 2011

Я узнал, что при использовании find с xargs рекомендуется использовать аргументы -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 a и b b b вместо a, a, a, b, b, b.

Мой вопрос: почему в приведенном выше примере нет проблем?Я думал, что это будет искать a, a, a, b, b, b и вернуть обе строки в text.

Чего мне не хватает?

1 Ответ

1 голос
/ 18 марта 2011

-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.

...