Grep для нескольких шаблонов в нескольких файлах - PullRequest
5 голосов
/ 15 сентября 2011

Я гуглил и не могу найти ответ, который ищу.

Скажем, у меня есть файл text1.txt в каталоге mydir, содержимое которого:

one
two

и еще один с именем text2.txt, также в mydir, содержимое которого:

two
three
four

Я пытаюсь получить список файлов (для данного каталога)которые содержат все (не любые) шаблоны, которые я ищу.В приведенном мною примере я ищу выходные данные где-то вроде:

./text1.txt

или

./text1.txt:one
./text1.txt:two

Единственные вещи, которые мне удалось найти, касаются соответствиялюбые шаблоны в файле или сопоставление нескольких шаблонов в одном файле (который я пытался распространить на весь каталог, но получал ошибки использования grep).

Любая помощь очень ценится.

Edit-Things, которые я пробовал

grep "pattern1" < ./* | grep "pattern2" ./*

"неоднозначное перенаправление"

grep 'pattern1'|'pattern2' ./*

возвращает файлы, соответствующие любому шаблону

Ответы [ 3 ]

9 голосов
/ 15 сентября 2011

Один из способов может быть таким:

find . | xargs grep 'pattern1' -sl | xargs grep 'pattern2' -sl
4 голосов
/ 19 марта 2012

Я думаю, это то, что вам нужно (вы можете легко добавить больше шаблонов)

grep -EH 'pattern1|pattern2' mydir
2 голосов
/ 30 июля 2013

Чтобы уточнить ответ мозга:

find . -type f -print0 | xargs -0 grep 'pattern1' -slZ | xargs -0 grep 'pattern2' -sl

Это не позволит grep искать каталоги и может правильно обрабатывать имена файлов с пробелами, если вы передадите флаг -Z для grep для всех, кроме последнего шаблона, и передадите -0 в xargs.

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