Недавно я наткнулся на следующие два примера
Пример 1: список только каталогов
ls -l | grep "^d"
Пример 2: Поиск внутри файлов
ls | xargs grep -i "Find Some String"
Теперь я прочитал отсюда, что
Если вы просто используете канал, он получает данные по стандартному входному потоку STDIN в виде необработанного набора данных, который он может сортировать по одной строке за раз.
Так что теперь я немного озадачен тем, почему grep требует xargs во втором, а не в первом. Насколько я понимаю, xargs используется для преобразования stdin
в arguments
. (Поскольку некоторые программы требуют аргументов вместо стандартного ввода). Означает ли это, что grep может принимать как stdin, так и аргументы? Я был бы признателен, если бы кто-то мог объяснить, почему во втором примере используется xargs, почему он не может работать без xargs? Какую цель это служит?