Grep: получить весь файл, который не имеет строки, которая соответствует

У меня много файлов с несколькими строками, и в большинстве случаев одна из строк содержит определенный шаблон. Я хотел бы перечислить каждый файл, который не имеет строки с этим шаблоном.

Ответ 1

Используйте опцию "-L", чтобы получить файл БЕЗ шаблона. Для справочной страницы:

-L, --files-without-match

Подавить нормальный вывод; вместо этого напечатайте имя каждого входного файла, из которого обычно не выводились бы выходные данные. Сканирование остановится при первом совпадении.

Ответ 2

Grep возвращает 0/1, чтобы указать, было ли совпадение, поэтому вы можете сделать что-то вроде этого:

for f in *.txt; do
    if ! grep -q "some expression" $f; then
        echo $f
    fi
done

EDIT. Вы также можете использовать опцию -L:

grep -L "некоторое выражение" *

Ответ 3

попробуйте "count" и отфильтруйте, где равно ": 0":

grep -c [pattern] * | grep ':0$'

(если вы используете кашель TurboGREP, у вас не будет переключателя -L;))

(ОБНОВЛЕНИЕ: добавлено "$" в конце регулярного выражения в случае, если есть файлы с ": 0" в имени)