Ответы:
Используйте параметр командной строки -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.