Проблема в том, что
grep -F -r 'string1|string2|string3' /var/www/http
будет искать литеральную строку string1|string2|string3
в файлах. Обратите внимание: поскольку вы ищете фиксированные строки, нет причин использоватьegrep
(илиgrep -E
).
Что можно сделать, так это использовать
printf '%s\n' 'string1' 'string2' 'string3' | grep -f /dev/stdin -F -r /var/www/http
Это заставило бы grep
прочитать фиксированные строки для сопоставления со стандартным вводом (, предоставленным printf
), и использовать их для получения всех строк, которые соответствуют им в любом файле в заданном каталоге.
Все, что генерирует текстовый документ с шаблонами в отдельных строках, может заменить printf
выше, включая простой текстовый файл (, который может быть прочитан непосредственноgrep -f textfile -F...
).
Пример из ваших комментариев:
Найдите любую из строк Allow from 8.8.2.5
, Allow from 192.3.0.4
и DenyAll
в файлах в$dirpath
:
printf '%s\n' 'Allow from 8.8.2.5' 'Allow from 192.3.0.4' 'DenyAll' |
grep -f /dev/stdin -F -r "$dirpath"
Я предлагаю использовать такой инструмент, как Linux Respin(исходный код)или Linux Live Kit , который вы можете использовать для создания загрузочного ISO (, если ваш Linux с нуля дистрибутив поддерживает ). Вы можете искать учебник, например этот .