Следующее выражение grep успешно перечисляет все файлы .exe и .html в текущем каталоге и подкаталогах.
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
Как мне инвертировать этот результат, чтобы перечислить те, которые не являются .html или .exe вместо этого. (То есть !=
.)
-v
/--invert-match
не обязательно перевернет,grep
указывает ли код возврата на успешное выполнение, а вместо этого совпадет со строками, которые в противном случае не были бы сопоставлены. Те, кто хочет инвертировать код возврата (т.е. преуспеть, если все строки не соответствуют шаблону, а не по крайней мере одна), должны использовать! grep
. Это находит применение в условных выражениях, например:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.или
Вы также можете сделать то же самое, используя
find
:Больше информации здесь .
источник
find
- самое семантическое решение этой проблемы XY. Объединениеls
иgrep
для этой цели кажется в лучшем случае хакерским. Это должен быть принятый ответ. (+1)Добавьте
-v
опцию в вашуgrep
команду, чтобы инвертировать результаты.источник
источник
Как указано несколько раз, инверсия достигается с помощью
-v
опцииgrep
. Позвольте мне добавить (надеюсь, забавное) примечание, что вы могли бы выяснить это самостоятельно, просматриваяgrep
текст справки:источник