Comprendere GREP in Linux: utilizzo e applicazioni

Comprendere GREP in Linux: utilizzo e applicazioni
Una persona che utilizza un computer portatile.

Grep è uno strumento UNIX compatto progettato per la ricerca di pattern. Introdotto originariamente in V6 UNIX, è diventato un punto fermo in vari sistemi operativi simili a UNIX, tra cui Linux, macOS e varianti BSD. In questo articolo, esploreremo le funzionalità fondamentali di Grep e forniremo esempi pratici per la sua applicazione nelle attività quotidiane.

Comprensione delle basi di Grep

La funzione primaria di Grep è semplice: elabora gli input per identificare e visualizzare pattern di testo corrispondenti. Questa utility può esaminare quasi ogni sorgente di testo normale, consentendole di analizzare direttamente i file o di lavorare con output di altri comandi.

Per iniziare a usare Grep, uno dei comandi più semplici è leggere da un file di testo. Ad esempio, puoi visualizzare il contenuto di sample.txtcon il seguente comando:

Puoi anche cercare parole specifiche all’interno dei tuoi file di testo:

Grep che trova una parola in un terminale.

Inoltre, Grep può essere combinato con i pipe UNIX per unificare più comandi in un’unica operazione:

Utilizzo di Grep per stampare un file intero senza argomenti.

Per approfondire il funzionamento dei cercapersone in Linux, consultate il nostro cheat sheet su GNU less.

Ricerca di file in una directory

Un’applicazione pratica di Grep è la localizzazione dei file in una directory. È possibile inviare l’output del lscomando direttamente in Grep.

Ad esempio, questo comando visualizzerà tutti i file JPEG nella directory Download evidenziandone le estensioni:

Filtraggio Grep degli elenchi di file in base all'estensione.

È possibile estendere l’ lsoutput ed eseguire pattern matching più complessi. Ad esempio, il seguente comando elenca tutti i file nella directory corrente che sono più piccoli di 1 MB:

Capacità di Grep di trovare corrispondenze di testo in formati più grandi.

Ignorare la distinzione tra maiuscole e minuscole

Di default, la maggior parte degli strumenti UNIX è sensibile alle distinzioni tra maiuscole e minuscole. Ciò significa che le stringhe “Hello”, “hello”, “hEllo” e “helLo” vengono interpretate come voci distinte.

Per impostazione predefinita, Grep è sensibile alle maiuscole e alle minuscole.

Ciò può complicare le ricerche di testo, specialmente quando sono presenti diversi casi di una parola. Per mitigare questo problema, puoi usare Grep con il -iflag abbinato al termine di ricerca:

Il flag -i in Grep che disabilita la distinzione tra maiuscole e minuscole.

Ricerca ricorsiva

Grep ha la capacità di cercare in più file o intere directory contemporaneamente. Ciò è particolarmente utile quando si esamina un progetto con vari file e si desidera trovare occorrenze di testo specifico in una directory. Ad esempio, utilizzare il seguente comando per individuare il termine “MakeTechEasier” all’interno della directory “sample”:

La funzionalità ricorsiva di Grep per la ricerca di più file.

Vale la pena notare che l’impiego del -rflag obbliga Grep a esaminare tutti i file nella directory specificata, che possono includere file non di testo. Per evitare questa situazione, utilizzare -Ianche il flag:

Identificazione dei file con stringhe specifiche

Oltre a visualizzare dove appare una stringa nei file, Grep può generare un elenco di file che contengono il testo che stai cercando. Ciò è utile quando vuoi accertare se un file ha un certo contenuto senza visualizzare ogni istanza trovata.

Per fare ciò, usa Grep con i seguenti flag -re -l, insieme alla stringa di destinazione e alla directory in cui desideri effettuare la ricerca:

Grep restituisce i percorsi dei file dei contenuti corrispondenti.

Inoltre, puoi incapsulare il tuo comando Grep in una subshell Bash per imporre più condizioni di ricerca. Il seguente comando, ad esempio, restituirà file contenenti sia “Hello” che “MakeTechEasier” nella directory “sample”:

Utilizzo delle subshell Bash con Grep per la corrispondenza multi-condizione.

Rivelazione di risultati non corrispondenti

Oltre alle ricerche standard, Grep può anche produrre risultati che escludono i criteri specificati. Questa funzionalità può essere molto utile quando è necessario rilevare errori o irregolarità nei propri input di testo.

Per eseguirlo, utilizza il -vflag insieme alle tue opzioni preferite. Ad esempio, il seguente comando esegue la scansione ricorsiva di tutti i file nella directory “/etc/nginx” e restituisce tutte le righe che non includono la stringa “nginx”:

Utilizzare il flag invert per trovare tutto tranne una stringa specifica.

Alla ricerca di parole e linee

Può anche essere utile istruire Grep a cercare parole intere o intere righe piuttosto che qualsiasi stringa che si adatti a uno schema specifico. Questo approccio è particolarmente utile quando si prende di mira una sequenza di caratteri che è prevalente in varie parole. Ad esempio, la ricerca del termine “it” potrebbe produrre numerosi falsi positivi poiché si verifica in molte altre parole.

Per risolvere questo problema, esegui Grep utilizzando il -wflag seguito dalla parola desiderata:

Esecuzione della corrispondenza di parole intere con Grep.

Invece di restituire tutte le istanze contenenti il ​​pattern di ricerca, Grep restituisce solo la parola stessa. Ciò si applica anche a intere righe quando si usa il -xflag, rendendolo particolarmente utile per localizzare frasi o righe esatte nei file di configurazione.

Grep trova intere righe di testo.

Incorporare i numeri di riga nell’output di Grep

I numeri di riga svolgono un ruolo fondamentale nel debug del codice e nella revisione dei documenti. Semplificano il processo di individuazione della posizione di una riga o funzione specifica, velocizzando notevolmente le revisioni.

Grep offre la funzionalità di includere i numeri di riga nel suo output. Puoi attivarla eseguendo il comando con il -nflag insieme al termine di ricerca:

Grep visualizza i numeri di riga delle corrispondenze in un file.

Se combinato con pipe UNIX, puoi affinare l’output di Grep per mostrare solo i numeri di riga dei risultati della tua ricerca. Questo approccio è particolarmente utile per elaborare grandi volumi di testo:

Utilizzo di pipe UNIX con Grep per un'elaborazione raffinata dell'output.

Utilizzo di Regex estese con Grep

Grep utilizza Basic Regular Expressions (BRE) come metacaratteri primari per la corrispondenza del testo. Sebbene ciò sia funzionale per vari compiti, gli utenti potrebbero trovarlo restrittivo, specialmente quando esaminano gruppi di pattern.

Per espandere la capacità, molte implementazioni di Grep incorporano il -Eflag per abilitare l’analisi delle Extended Regular Expressions (ERE). Ad esempio, il comando seguente richiede il -Eflag:

Utilizzo di Regex estese con Grep per la corrispondenza dei pattern.

Inoltre, Grep ha una modalità speciale che elimina del tutto le funzionalità regex. Per attivarla, esegui il comando con il -Fflag seguito da una stringa semplice:

Corrispondenza esatta delle stringhe senza regex in Grep.

Includere le linee circostanti nell’output di Grep

La forza di Grep sta nel rivelare dove appare il testo nel tuo input o nei tuoi file. Tuttavia, la sola visualizzazione della posizione esatta potrebbe non essere sufficiente durante la risoluzione dei problemi. Il contesto che circonda una stringa, come quello trovato nei registri degli arresti anomali, può spesso fornire informazioni essenziali.

Per stampare ulteriore contesto, puoi eseguire Grep con il -Cflag combinato con il numero di righe che desideri visualizzare prima e dopo il risultato della tua ricerca. Ad esempio, per mostrare cinque righe attorno alla tua stringa di destinazione, usa il seguente comando:

Grep visualizza il contesto circostante per una stringa corrispondente.

Puoi anche personalizzare i risultati stampando selettivamente solo le righe precedenti o successive usando i flag -Be -A. Ad esempio, il comando seguente visualizzerà le dieci righe che seguono il termine di ricerca:

Grep stampa le righe che seguono la stringa corrispondente.

Ora che hai acquisito le conoscenze di base di Grep e di come utilizzarlo per le attività comuni, sei pronto per approfondire la riga di comando e l’ecosistema UNIX più ampio. Esplora ulteriormente imparando a usare sed in Linux per un’elaborazione del testo ancora più potente.

Credito immagine: Alejandro Escamilla tramite Unsplash . Tutte le modifiche e gli screenshot sono di Ramces Red.

Fonte

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *