Il comando grep, molto utilizzato sia in Unix che nella maggior parte delle distribuzioni Linux, รจ stato concepito per la ricerca all’interno di uno o piรน file di righe contenenti determinate stringhe (patterns).
Si tratta di un comando estremamente utile in grado di svolgere ricerche anche all’interno di documenti o gruppi di documenti particolarmente ampi. In questo articolo, esploreremo la sintassi, gli utilizzi e gli esempi pratici per utilizzare grep in combinazione con le espressioni regolari.
La sintassi standard utilizzata per grep prevede istruzioni contenenti il nome del comando, eventuali opzioni, pattern da ricercare e nome del file o dei file su cui deve essere effettuata la ricerca:
grep [opzioni] "pattern" nome_file ...
Una volta digitata l’istruzione da Shell, sarร sufficiente premere [Invio] per dare il via alla ricerca; ecco un possibile esempio:
grep php linguaggi
Nel caso dell’esempio appena proposto, il comando cercherร la stringa “php” all’interno del file “linguaggi”. Quando vengono passati come parametri piรน documenti su cui svolgere la ricerca, l’output prodotto sarร comprensivo del nome dei file in cui รจ stata trovata la pattern desiderata; ad esempio:
grep php *
linguaggi: php รจ un linguaggio SSI
linguaggi: Il linguaggio di scripting php
scripts: Una newsletter con php
Il comando considera come percorso di ricerca valido la directory corrente a meno che non ne venga specificata una differente; una volta lanciata l’istruzione, grep effettuerร uno pattern scanning di tutti i documenti contenuti nella cartella e restituirร i risultati validi per ogni documento trovato positivo ai fini della ricerca.
Come si sarร potuto notare, grep accetta come parametro il carattere sostitutivo “*” che in questo caso significa “tutti i file”. Ma le ricerche effettuate tramite questo comando possono essere raffinate utilizzando le espressioni regolari. In effetti, il termine grep รจ un acronimo dall’Inglese che sta per global regular expression and print.
Se per esempio volessimo digitare il seguente comando:
grep 'mrw.*r' siti_web
Lo scanning verrร effettuato ricercando tutti i pattern che iniziano con i caratteri “mrw” e terminano con “r” all’interno del file “siti_web”. L’uso dei singoli apici permette di non visualizzare il carattere “*” come carattere jolly; in questo caso, l’asterisco non equivarrร quindi a tutti i caratteri possibili, ma indicherร la possibilitร di ripetere dei caratteri per un numero non definito di volte. Sarร invece il punto fermo (“.“) a rappresentare tutti i caratteri, tranne la newline.
Vediamo quindi un elenco di caratteri che possono essere utilizzati nelle espressioni regolari con grep:
- . significa “qualsiasi carattere”.
- ^ indica l’inizio di una linea.
- $ indica la fine di una linea.
- < indica l’inizio di una parola.
- > indica la fine di una parola.
- ? significa che l’elemento che lo precede รจ presente meno di una volta.
- * significa che l’elemento che lo precede รจ presente zero o piรน volte.
- + significa che l’elemento che lo precede รจ presente una o piรน volte.
- {n} significa che l’elemento che lo precede รจ presente n volte.
- {n,} significa che l’elemento che lo precede รจ presente n o piรน volte.
- {,n} significa che l’elemento che lo precede รจ presente meno di n volte.
- {n,m} indica un numero di ripetizioni dell’elemento che lo precede compreso nell’intervallo tra n e m; n e m possono essere omessi escludendo il limite corrispondente.
Questi sono i simboli piรน utilizzati; eventuali approfondimenti potranno essere affrontati attraverso la relativa pagina del manuale in linea di Unix e Linux tramite il comando:
man grep
In conclusione, grep รจ uno strumento potente per la ricerca di stringhe nei file. Con la combinazione delle espressioni regolari, diventa un alleato insostituibile per chiunque lavori quotidianamente con la riga di comando. Che si tratti di sviluppatori, sistemisti o appassionati, imparare le potenzialitร di questo comando permette di risparmiare tempo e di ottenere risultati piรน mirati e precisi. Non sottovalutate mai il potere di grep nel vostro flusso di lavoro!