Risposte:
Utilizzare l'opzione della riga di comando -v
o --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
o
grep --invert-match
Puoi anche fare la stessa cosa usando find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Maggiori informazioni qui .
find
comando è la soluzione più semantica a questo problema XY. Combinare ls
e grep
per questo scopo sembra nel migliore dei casi. Questa dovrebbe essere la risposta accettata. (+1)
Aggiungi l' -v
opzione al tuo grep
comando per invertire i risultati.
grep "subscription" | grep -v "spec"
-v
/--invert-match
non capovolterà necessariamente se il codice di ritornogrep
indica l'esecuzione corretta, ma corrisponderà invece alle righe che altrimenti non sarebbero abbinate. Coloro che stanno cercando di invertire il codice di ritorno (cioè avere successo se tutte le linee non corrispondono al modello, piuttosto che almeno uno) dovrebbero usare! grep
. Questo viene usato negli espressioni condizionali, ad esempio:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.