Недавно я наткнулся на следующие два примера

Пример 1: список только каталогов

ls -l | grep "^d"

Пример 2: Поиск внутри файлов

   ls | xargs grep -i "Find Some String"

Теперь я прочитал отсюда, что

Если вы просто используете канал, он получает данные по стандартному входному потоку STDIN в виде необработанного набора данных, который он может сортировать по одной строке за раз.

Так что теперь я немного озадачен тем, почему grep требует xargs во втором, а не в первом. Насколько я понимаю, xargs используется для преобразования stdin в arguments . (Поскольку некоторые программы требуют аргументов вместо стандартного ввода). Означает ли это, что grep может принимать как stdin, так и аргументы? Я был бы признателен, если бы кто-то мог объяснить, почему во втором примере используется xargs, почему он не может работать без xargs? Какую цель это служит?

1 ответ1

1

В примере 2 вы ищете определенный текст в file contents , поэтому вам нужно xargs для передачи имен файлов в grep.
В примере 1 вы ищете вывод ls, а не содержимое файла.

на самом деле, вы можете искать содержимое файла без использования xargs, что лучше:

grep -i 'some text' *

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .