Odpowiedzi:
Użyj opcji wiersza polecenia -v
lub --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
lub
grep --invert-match
Możesz również zrobić to samo, używając find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Więcej informacji tutaj .
find
Komenda jest najbardziej semantycznej Rozwiązaniem tego problemu XY. Łączenie ls
i grep
do tego celu wydaje się w najlepszym razie hacking. To powinna być zaakceptowana odpowiedź. (+1)
Dodaj -v
opcję do grep
polecenia, aby odwrócić wyniki.
grep "subscription" | grep -v "spec"
-v
/--invert-match
niekoniecznie odwróci, czy kod powrotugrep
wskazuje pomyślne wykonanie, ale zamiast tego dopasuje linie, które w innym przypadku nie byłyby dopasowane. Ci, którzy chcą odwrócić kod powrotu (tzn. Odnieść sukces, jeśli wszystkie wiersze nie pasują do wzorca, a nie co najmniej jeden), powinni skorzystać! grep
. Znajduje to zastosowanie w wyrażeniach warunkowych, npif ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
. : .