“ls | grep архивируют” по сравнению с “grep $ zip (ls)”

Я узнаю о расширении / замену команды, и при оплате вокруг примером, заметил, что эти две команды имеют различные результаты.

Например, если я CD в /usr/bin, и выполненный ls | grep zip, grep берет "zip" в именах файлов только.

Но когда я работаю grep zip $(ls) в том же каталоге, grep также берет zip в содержании файла. Почему? Ubuntu 16.04.

Я знаю, что это - вопрос о новичке, но все еще было бы полезно знать почему.Спасибо.

0
задан 1 June 2018 в 11:47

1 ответ

Это вызвано тем, что grep может работать в двух отличных режимах:

DESCRIPTION
   grep searches the named input FILEs for lines containing a match to the
   given PATTERN.  If no files are specified, or if the file “-” is given,
   grep  searches  standard  input.   By default, grep prints the matching
   lines.

В ls | grep zip, grep команда видит список имен файлов на его стандартном входе и поисках это.

В grep zip $(ls), оболочка заменяет результатами ls управляйте как список слова, который grep обработки как аргументы имени файла, ища каждого в свою очередь шаблон zip.

ВАЖНОЕ ПРИМЕЧАНИЕ: если какие-либо из имен файлов будут содержать пробелы, то разделенные пробелом части будут рассматривать как отдельные аргументы, приводящие к No such file or directory ошибки. Более безопасный способ искать соответствие файлам состоит в том, чтобы использовать шарики оболочки, например. grep 'pattern' *zip*

9
ответ дан 29 October 2019 в 05:18

Другие вопросы по тегам:

Похожие вопросы: