drwxr -xr -x 5 root root 4096 25 июня 09 :46 кэш drwxr -xr -x 9 root root 4096 25 июня 09 :46 lib drwxr -xr -x 2 root root 4096 25 мая 10 :11 локальный lrwxrwxrwx 1 root root 11 25 мая 10 :11 блокировка ->../run/lock lrwxrwxrwx 1 root root 12 25 мая 10 :11 log -> volatile/log lrwxrwxrwx 1 root root 6 25 мая 10 :11 run ->../run drwxr -xr -x 3 root root 4096 25 июня 09 :46 катушка lrwxrwxrwx 1 root root 12 25 мая 10 :11 tmp -> volatile/tmp drwxrwxrwt 4 root root 80 25 июня 09 :46 volatile
Из-за этого энергозависимого монтирования журналы не сохраняются после загрузки.
Для этого предназначены предпросмотры. Вызовите grep в режиме PCRE -P
и режиме slurp -z
. Затем перечислите входной файл, который удовлетворяет 3 прогнозам. (?s:.....)
сделает точку .
новой строкой.
$ grep -Plz '(?s:(?=.*John)(?=.*Riya)(?=.*bug))' file
$ grep -Plzr '(?s:.....)'.
Будет рекурсивно и выведен список соответствующих файлов в текущем каталоге.
Вы можете использовать find
с несколькими последовательностями -exec grep
для соответствия каждому шаблону:
find. -type f -exec grep -q "John" {} \; -exec grep -q "Riya" {} \; -print
Это не так плохо, как кажется, так как find
остановится при первом неудачном тесте.
Вы можете использовать xargs:
grep -rlZ John. | xargs -r0 grep -lZ Ryia | xargs -r0 grep -l bug
grep -rlZ John
:Будет рекурсивно(-r
)выполнять grep John во всех файлах и печатать только имена файлов(-l
). -Z
гарантирует, что любые необычные символы, такие как символы новой строки, будут напечатаны и отправлены в следующую команду правильно.
xargs -r0 grep -lZ Ryia
:xargs передаст имена файлов в предыдущем канале в качестве аргументов для следующего grep -, который ищет «Riya». Опция -r0
для xargs на самом деле представляет собой две опции -, каждая из которых относится к обработке необычных символов имени файла. Этот grep ищет «Riya» в файлах, в которых уже есть «John», и передает эти имена файлов в следующий канал
xargs -r0 grep -l bug
:Наконец, «ошибка» ищется во всех файлах, в которых уже есть «Джон» и «Рия», а затем печатается окончательный список файлов.
Учитывая 2 файла example_1.txt
иexample_2.txt
:
find./ -type f -name "*1.txt" -exec grep -E "John|Riya|bug" {} \;
Если подстановочного знака недостаточно, вы можете использовать параметр -regex
из поиска
Добавить в @Rakesh _Ответ Шармы
grep -rzl 'John\b.*Riya\b.*\bbug\b' ./
порядок паттернов не имеет значения:
grep -l 'bug' "$(grep -l 'Riya' "$(grep -lr 'John'./)")"