grep è un potente strumento da riga di comando che viene utilizzato per cercare in uno o più file di input le righe che corrispondono a un'espressione regolare e scrive ciascuna riga corrispondente nell'output standard.
In questo articolo, ti mostreremo come escludere una o più parole, schemi o directory durante la ricerca con grep .
Escludi parole e schemi #
Per visualizzare solo le righe che non corrispondono a un modello di ricerca, utilizzare il -v ( o --invert-match ) opzione.
Ad esempio, per stampare le righe che non contengono la stringa nologin useresti:
grep -wv nologin /etc/passwd root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Il -w l'opzione dice a grep per restituire solo quelle righe in cui la stringa specificata è una parola intera (racchiusa da caratteri non di parola).
Per impostazione predefinita, grep fa distinzione tra maiuscole e minuscole. Ciò significa che i caratteri maiuscoli e minuscoli vengono trattati come distinti. Per ignorare il caso durante la ricerca, invoca grep con il -i opzione.
Se la stringa di ricerca include spazi, è necessario racchiuderla tra virgolette singole o doppie.
Per specificare due o più modelli di ricerca, utilizzare il -e opzione:
grep -wv -e nologin -e bash /etc/passwd
Puoi usare il -e opzione tutte le volte che vuoi.
Un'altra opzione per escludere più modelli di ricerca consiste nell'unire i modelli utilizzando l'operatore OR | .
L'esempio seguente stampa le righe che non contengono le stringhe nologin o bash :
grep -wv 'nologin\|bash' /etc/passwd
GNU grep supporta tre sintassi di espressioni regolari, Basic, Extended e compatibile con Perl. Per impostazione predefinita, grep interpreta il modello come un'espressione regolare di base in cui i metacaratteri come | perdono il loro significato speciale e devi usare le loro versioni con barra rovesciata.
Se utilizzi l'opzione di espressione regolare estesa -E , quindi l'operatore | non deve essere evitato, come mostrato di seguito:
grep -Ewv 'nologin|bash' /etc/passwd
È possibile specificare diverse possibili corrispondenze che possono essere stringhe letterali o set di espressioni. Nell'esempio seguente, le righe in cui la stringa games si verificano all'inizio di una riga sono esclusi:
grep -v "^games" file.txt
L'output di un comando può essere filtrato con grep attraverso le tubazioni e sul terminale verranno stampate solo le linee che corrispondono a un determinato motivo.
Ad esempio, per stampare tutti i processi in esecuzione sul tuo sistema eccetto quelli in esecuzione come utente "root" puoi filtrare l'output di ps comando:
ps -ef | grep -wv root Escludi directory e file #
A volte quando si esegue una ricerca ricorsiva con -r o -R opzioni, potresti voler escludere directory specifiche dal risultato della ricerca.
-r o -R opzioni è che quando grep viene invocato con R maiuscolo seguirà tutti i collegamenti simbolici
Per escludere una directory dalla ricerca, usa --exclude-dir opzione. Il percorso della directory esclusa è relativo alla directory di ricerca.
Ecco un esempio che mostra come cercare la stringa linuxize in tutti i file all'interno di /etc , escluso il /etc/pki directory:
grep -R --exclude-dir=pki linuxize /etc Per escludere più directory, racchiudere le directory escluse tra parentesi graffe e separarle con virgole senza spazi.
Ad esempio, per trovare i file che contengono la stringa 'gnu' nel tuo sistema Linux escludendo il proc , boot e sys directory che eseguiresti:
grep -r --exclude-dir={proc,boot,sys} gnu /
Quando si utilizza la corrispondenza con caratteri jolly, è possibile escludere i file il cui nome di base corrisponde al GLOB specificato in --exclude opzione.
Nell'esempio seguente, stiamo cercando in tutti i file nella directory di lavoro corrente la stringa linuxize , esclusi i file che terminano con .png e .jpg directory:
grep -rl --exclude=*.{png,jpg} linuxize * Conclusione #
Il grep Il comando consente di escludere pattern e directory durante la ricerca di file.