Come escludere parole e schemi in Grep

19 mag 2021 3 min di lettura
Come escludere parole e schemi in Grep
Indice dei contenuti

Introduzione

grep è un potente strumento della 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 ogni riga corrispondente nell'output standard.

In questo articolo, ti mostreremo come escludere una o più parole, schemi o directory durante la ricerca con grep.

Escludere parole e schemi

Per visualizzare solo le righe che non corrispondono a un modello di ricerca, utilizzare l'opzione -v (o --invert-match).

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
noviello:x:1000:1000:noviello:/home/noviello:/bin/bash

L'opzione -w permette a grep di restituire solo quelle righe in cui la stringa specificata è una parola intera (racchiusa da caratteri non alfanumerici).

Per impostazione predefinita, grep fa distinzione tra maiuscole e minuscole. Ciò significa che i caratteri maiuscoli e minuscoli vengono trattati come distinti. Per ignorare le maiuscole/minuscole durante la ricerca, invocare grep con l'opzione -i.

Se la stringa di ricerca include spazi, è necessario racchiuderla tra virgolette singole o doppie.

Per specificare due o più modelli di ricerca, utilizza l'opzione -e:

grep -wv -e nologin -e bash /etc/passwd

Puoi utilizzare l'opzione -e tutte le volte che desideri.

Un'altra opzione per escludere più pattern di ricerca consiste nell'unire i pattern utilizzando l'operatore OR |.

L'esempio seguente stampa le righe che non contengono le stringhe nologin oppure bash:

grep -wv 'nologin\|bash' /etc/passwd

GNU grep supporta tre sintassi di espressioni regolari, Basic, Extended e Perl-compatibile. Per impostazione predefinita, grep interpreta il modello come un'espressione regolare di base in cui i metacaratteri | perdono il loro significato speciale e devi utilizzare le loro versioni con barra rovesciata.

Se utilizzi l'opzione di espressione regolare estesa -E , non è necessario eseguire l'escape dell'operatore |, 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, vengono escluse le righe games  in cui la stringa si trova all'inizio di una riga:

grep -v "^games" file.txt

L'output di un comando può essere filtrato con grep tramite piping e sul terminale verranno stampate solo le righe che corrispondono a un determinato modello.

Ad esempio, per stampare tutti i processi in esecuzione sul tuo sistema eccetto quelli in esecuzione come utente "root" puoi filtrare l'output del comando ps:

ps -ef | grep -wv root

Escludere directory e file

A volte, quando si esegue una ricerca ricorsiva con le opzioni -r o -R, è possibile escludere directory specifiche dal risultato della ricerca.

La principale differenza tra le opzioni -r o -R è che quando grep viene invocato con le maiuscole R seguirà tutti i collegamenti simbolici.

Per escludere una directory dalla ricerca, utilizzare l'opzione --exclude-dir. Il percorso della directory esclusa è relativo alla directory di ricerca.

Ecco un esempio che mostra come cercare la stringa noviello in tutti i file all'interno di /etc, esclusa la directory /etc/pki:

grep -R --exclude-dir=pki noviello /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 vostro sistema Linux escluso le directory proc, boot e sys  si correrebbe:

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 nell'opzione --exclude.

Nell'esempio seguente, stiamo cercando la stringa in tutti i file nella directory di lavoro corrente noviello, esclusi i file che terminano con .png e .jpg:

grep -rl --exclude=*.{png,jpg} noviello *

Conclusione

Il comando grep consente di escludere modelli e directory durante la ricerca di file.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.