У меня много файлов с несколькими строками, и в большинстве случаев одна из строк содержит определенный шаблон. Я хотел бы перечислить каждый файл, который не имеет строки с этим шаблоном.
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" в имени)