Неоднозначное перенаправление, grep команда

Это было осуществление из одного учебника Linux: дать примеру оба перенаправленные ввода и вывода. Я нашел ответ в сети:

grep \$Id  <  *.c  > id_list

Но этот *.c, кажется, проблема. Это может ответить работаться вокруг?

0
задан 1 August 2018 в 10:57

2 ответа

Не возможно перенаправить больше, чем одного файла для ввода использования <. (или даже вывод, для вывода необходимо использовать tee).

Для демонстрации рабочего примера можно использовать что-то как: grep \$Id < 1.c > id_list.

Можно также использовать "здесь строку", тип перенаправления для получения Вас хочет.

grep <<< $(cat *.c) > out
1
ответ дан 28 October 2019 в 05:59

Так как grep может читать из файлов, имена которых передаются ему как аргументы, Вам не нужно перенаправление ввода вообще здесь:

grep '$Id' -- *.c > id_list

По умолчанию, если *.c расширяется до списка больше чем одного файла, затем grep снабдит префиксом каждый вывод соответствия имя файла, в котором это было найдено; если Вы не хотите это, добавьте -h (или --no-filename) переключатель.

Для рекурсивного поиска можно использовать --include опция

grep -r --include='*.c' '$Id' . > id_list
2
ответ дан 28 October 2019 в 05:59

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

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