Come invertire un'espressione grep


237

La seguente espressione grep elenca correttamente tutti i file .exe e .html nella directory corrente e nelle sottodirectory.

ls -R |grep -E .*[\.exe]$\|.*[\.html]$  

Come invertire questo risultato per elencare quelli che non sono invece un .html o .exe. (Cioè,. !=)

Risposte:


337

Utilizzare l'opzione della riga di comando -vo --invert-match,

ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$

4
Va notato che -v/ --invert-matchnon capovolterà necessariamente se il codice di ritorno grepindica 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.
Zyl,

98
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 .


2
Il findcomando è la soluzione più semantica a questo problema XY. Combinare lse grepper questo scopo sembra nel migliore dei casi. Questa dovrebbe essere la risposta accettata. (+1)
Eric Seastrand,

4
@Eric Indipendentemente dai requisiti del PO, invertire un'espressione grep è utile per molto più che trovare file. Dubito che sia la ragione per cui molte persone vengono qui.
byxor,

30

Aggiungi l' -vopzione al tuo grepcomando per invertire i risultati.



7

Come affermato più volte, l'inversione è raggiunta -vdall'opzione grep. Permettetemi di aggiungere la nota (si spera divertente) che avresti potuto capirlo tu stesso sfogliando il greptesto di aiuto:

grep --help | grep invert

-v, --invert-match seleziona linee non corrispondenti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.