2016-10-04 3 views
0

Я использую команду рекурсивно найти файлы, содержащие определенный string1:Найти файлы, содержащие Mutiple строки

find . -type f -exec grep -H string1 {} \; 

Мне нужно найти файлы, содержащие несколько строк, поэтому команда должна возвращать те, которые содержат все строки. Что-то вроде этого:

find . -type f -exec grep -H string1 AND string2 {} \; 

Я не мог найти способ. Строки могут быть в любом месте файлов. Даже решение только для двух строк было бы неплохо.

+0

Я мог бы перевести ваш вопрос на вопрос «egrep»: команда 'egrep -l 'string1 | string2" 'дает все файлы, которые содержат' string1' ИЛИ 'string2', в случае, если существует параметр, чтобы сделать 'egrep -l" string1 string2 "' предоставить файлы, содержащие 'string1' и' string2', ваш вопрос будет разрешен. (Я не знаю, существует ли такой параметр) – Dominique

ответ

0

вы также можете попробовать это;

find . -type f -exec grep -l 'string1' {} \; | xargs grep -l 'string2' 

это показывает имена файлов, которые содержат string1 и string2

0

с GNU grep

grep -rlZ 'string1' | xargs -0 grep -l 'string2' 


из man grep

-r, --recursive

Читать все файлы под каждым каталогом, рекурсивно, после символических ссылок , только если они находятся в командной строке. Обратите внимание: если не задан операнд , grep ищет рабочий каталог. Это , эквивалентный опции -d recurse.

-Z, --null Выведите нулевой байт (символ ASCII NUL) вместо символа, который обычно следует за файлом . Например, grep -lZ выводит нулевой байт после каждого имени файла вместо обычной новой строки. Эта опция делает вывод однозначным даже при наличии имен файлов, содержащих необычные символы , такие как символы новой строки. Эта опция может использоваться с командами, такими как find -print0, perl -0, sort -z, и xargs -0 для обработки произвольных имен файлов, даже тех, которые содержат символы новой строки.

0

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

find . -type f -exec grep -q 'string1' {} \; -exec grep -H 'string2' {} \; 

Первая команда grep использует -q, «quiet», которая возвращает успешный статус выхода, если строка найдена.

Смежные вопросы