1

Я ищу вхождения слова «изображение» в папке с большим количеством файлов и подпапок.

Обычные команды grep (grep и 'git grep') возвращают более тысячи совпадений. Как я могу добавить что-то в команду grep, чтобы сказать это,

«Найдите мне файлы, которые содержат« слово », но только если слова« репортер »или« издатель »упоминаются в этом же файле

2 ответа2

1

Следующее должно работать:

grep word `grep -E -l 'reporter|publisher'`

Команда grep в обратных кавычках сгенерирует список файлов, которые содержат 'reporter' или 'publisher' (-l говорит grep перечислять файлы, которые соответствуют, вместо того, чтобы давать обычный вывод, -E необходим для обеспечения чередования | работает), которые затем указываются в качестве аргументов для внешней команды grep , которая, в свою очередь, ищет слово «word» (вы также можете добавить -l к этому, если вы просто хотите получить список файлов, которые соответствуют). Обратите внимание, что это не так эффективно, как выписывать вещи как одно регулярное выражение (оно ищет больше раз, чем абсолютно необязательно), но обычно это легче объяснить, чем помещать его как одно регулярное выражение.

0

Сначала создайте список файлов, в которых есть reporter|publisher а затем используйте этот список в качестве источника файлов, которые вы хотите найти по word .

Если вы используете ack, вы можете сделать это:

ack -l 'reporter|publisher' | ack -x word

где -x указывает второму вызову ack использовать список файлов в stdin в качестве списка файлов для поиска.

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