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