grep для слова, но также упомяните другое слово (а), которое должно появиться в файле

247
american-ninja-warrior

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

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

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

1

2 ответа на вопрос

1
Austin Hemmelgarn

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

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

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

Мне нравится этот ответ american-ninja-warrior 6 лет назад 0
0
Andy Lester

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

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

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

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