Comprendere GREP in Linux: utilizzo e applicazioni
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.txt
con il seguente comando:
Puoi anche cercare parole specifiche all’interno dei tuoi file di testo:
Inoltre, Grep può essere combinato con i pipe UNIX per unificare più comandi in un’unica operazione:
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 ls
comando direttamente in Grep.
Ad esempio, questo comando visualizzerà tutti i file JPEG nella directory Download evidenziandone le estensioni:
È possibile estendere l’ ls
output 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:
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.
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 -i
flag abbinato al termine di ricerca:
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”:
Vale la pena notare che l’impiego del -r
flag obbliga Grep a esaminare tutti i file nella directory specificata, che possono includere file non di testo. Per evitare questa situazione, utilizzare -I
anche 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 -r
e -l
, insieme alla stringa di destinazione e alla directory in cui desideri effettuare la ricerca:
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”:
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 -v
flag 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”:
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 -w
flag seguito dalla parola desiderata:
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 -x
flag, rendendolo particolarmente utile per localizzare frasi o righe esatte nei file di configurazione.
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 -n
flag insieme al termine di ricerca:
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 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 -E
flag per abilitare l’analisi delle Extended Regular Expressions (ERE). Ad esempio, il comando seguente richiede il -E
flag:
Inoltre, Grep ha una modalità speciale che elimina del tutto le funzionalità regex. Per attivarla, esegui il comando con il -F
flag seguito da una stringa semplice:
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 -C
flag 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:
Puoi anche personalizzare i risultati stampando selettivamente solo le righe precedenti o successive usando i flag -B
e -A
. Ad esempio, il comando seguente visualizzerà le dieci righe che seguono il termine di ricerca:
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.
Lascia un commento