Lo strumento della riga di comando grep è estremamente utile per cercare tra i dati di testo per linee e snippet che corrispondono a una stringa, un carattere, una parola o un’espressione regolare definiti. Mentre la maggior parte degli usi di grep sono per ordinare i dati per le corrispondenze di sintassi, cosa succede se vuoi invece escludere le corrispondenze di riga? Escludere le corrispondenze di stringa con grep è altrettanto utile quanto trovare e stampare le corrispondenze in grep, quindi esaminiamo come escludere le corrispondenze di stringa ed escludere le parole con grep.
Ovviamente, vorrete avere qualche esperienza da riga di comando e l’esposizione a grep per trovare ciò utile. Se vuoi seguire, puoi aprire l’applicazione Terminale e provarlo tu stesso. Poiché grep è un’utilità agnostica del sistema operativo, puoi utilizzare il trucco di esclusione in Mac OS, Linux, Unix o qualsiasi altro sistema su cui usi grep.
Come escludere una singola parola con grep
Il modo più semplice per escludere le righe con una corrispondenza di stringhe o sintassi è usare grep e il flag -v.
Per esempio, diciamo che stiamo usando cat per stampare un file sulla riga di comando, ma vogliamo escludere tutte le righe che includono il termine «ThisWord», quindi la sintassi sarebbe la seguente:
cat example.txt | grep -v «ThisWord»
L’output sarà il file di testo example.txt ma escludendo qualsiasi riga che contenga una corrispondenza di stringa con «ThisWord».
Puoi anche utilizzare grep direttamente sui file ed escludere le corrispondenze di riga in base a parole o sintassi, in questo modo:
grep -v «ThisWord» example.txt
Usa quello che funziona meglio per il tuo particolare flusso di lavoro.
Come escludere più stringhe o parole con grep
Ora che sai come escludere le corrispondenze per una singola parola, la prossima domanda ovvia riguarda l’esclusione di più parole con grep. Questo è altrettanto semplice, e ci sono diversi modi per farlo usando il flag -v e il flag -e.
Per prima cosa prendiamo l’esempio sopra riportato di usare cat su un file inviato a grep e escludere qualsiasi riga che corrisponda a due parole; «Word1» e «Word2», questo apparirebbe come il seguente:
cat example.txt | grep -v -e «Word1» -e «Word2»
Qualsiasi riga che contiene «Word1» o «Word2» verrà esclusa dai risultati stampati.
Puoi anche utilizzare grep direttamente sui file proprio come prima:
grep -v -e «Word1» -e «Word2» example.txt
Un altro approccio è quello di separare cosa escludere con grep usando una pipe per separare ogni match, in questo modo:
grep -Ev «word1 | word2» example.txt
Se provi una di queste opzioni su un file di testo di esempio, troverai che l’output è identico a prescindere dall’approccio che segui, escludendo ogni riga che include frasi, sintassi, parole o corrispondenze di testo mirate.
Ottimo, mostrami un utile esempio di esclusione dei dati con grep!
Per un esempio pratico che gli utenti Mac avanzati potrebbero trovare utili, possiamo usare l’esclusione grep quando stampiamo e interrogando la cronologia della riga di comando per trovare i comandi precedentemente eseguiti, escludendo alcune stringhe predefinite selezionate dall’output.
Nell’esempio qui stamperemo la cronologia dei comandi per le corrispondenze delle stringhe predefinite, ma escludiamo qualsiasi cosa che corrisponda a ciò che ha a che fare con iTunes come definito da «com.apple.itunes»:
history | grep «defaults write» | grep -v -e «com.apple.itunes»
Quindi, se lo hai seguito, questo riporterà tutte le esecuzioni storiche del comando «write defaults», ma escludendo tutto ciò che riguarda l’applicazione iTunes. Bello eh?
Se hai qualche utilità particolare di escludere le partite con grep, condividile con noi nei commenti qui sotto! E se ti è piaciuto questo articolo, ti piacerebbe sicuramente sfogliare i nostri numerosi articoli da riga di comando qui dove c’è ancora molto da imparare!
Novità nel 2024: Ecco cosa sapere su grep
Nel 2024, grep ha ricevuto alcune ottimizzazioni e nuove funzionalità che potrebbero rendere le tue ricerche ancora più semplici ed efficienti. Una delle novità più interessanti è l’introduzione di funzionalità avanzate per gestire le espressioni regolari, che ti consentono di escludere pattern complessi con maggiore facilità. Ad esempio, ora puoi utilizzare la sintassi (?!pattern) per escludere corrispondenze che seguono un certo schema, rendendo grep uno strumento ancora più potente.
Inoltre, le performance sono state migliorate, specialmente quando si lavora con file di grandi dimensioni. Questo significa che puoi aspettarti risultati più rapidi e meno utilizzo di risorse, il che è sempre un vantaggio quando si gestiscono dati pesanti.
Infine, molte distribuzioni Linux e macOS ora includono grep in versione GNU, il che porta con sé anche il supporto per nuove opzioni che semplificano ulteriormente il processo di esclusione delle parole. Assicurati di rimanere aggiornato con le ultime versioni e di esplorare tutte le nuove opzioni che possono migliorare il tuo flusso di lavoro!