Cerca

Grep delle meraviglie – 1


Painting wizard - J W BakerLo confesso, piรน imparo a conoscere grepย e piรน lo adoro per le enormi potenzialitร  nella ricerca, e non c’รจ giorno che non mi torni utile sfogliando enormi file di log o altre ricerche sui server che gestisco.
Allo stesso tempo mi fa paura, perchรฉ le funzionalitร  sono immense, e mi costringe ad uno studio continuo.
Imparo lentamente, perchรฉ l’argomento รจ particolarmente vasto considerato poi che grep esprime il meglio delle sue potenzialitร  in combinata con le espressioni regolari, un vero buco nero per me, ma ad ogni piccola scoperta sono grandi soddisfazioni.

Qualcuno mi ha chiesto “ma perchรฉ ti ostini a cercare di imparare questo grep, quando i sistemi operativi offrono tanti strumenti per le ricerche con delle interfacce comodissime?
Probabilmente non hanno mai dovuto fare delle ricerche in file di testo particolarmente grandi, ย come i file di log dei server ad esempio, e rimanere stupiti da quanto sia veloce grep, mentre con altri sistemi conviene lanciare la ricerca e poi andare in pausa caffe, sempre che al ritorno abbia giร  finito.

Per tenere traccia di alcune di queste potenzialitร , quelle che imparo via via e che possono tornarmi utili in futuro, ho pensato che poteva essere utile un “grep for dummies” formato di tanti appunti, partendo dalle cose basilari, e da implementare di volta in volta. Magari qualcuno piรน dummies di me alla fine mi offritร  una birra… ๐Ÿ™‚

Cercare con grep

Negli esempi a seguire, supponiamo di dover effettuare delle ricerche in uno o piรน ipotetici fileditesto.txt

Giusto per partire proprio dai fondamentali, il comando base da cui tutto nasce ย รจ

grep stringadacercare fileditesto.txt

dove supponiamo di dover cercare il testo stringadacercare all’interno del file fileditesto.txt

In questo caso si รจ utilizzato il comando grep senza alcuna opzione, per avere la lista delle opzioni disponibili viene in aiuto il classico comando man grep.

Se l’espressione da cercare รจ composta di piรน parole, dovremo chiuderla tra i classici apicini (”)

grep 'stringa da cercare' fileditesto.txt

Cercare con grep su piรน documenti

Mettiamo di dover cercare su diversi file, basta indicare uno dopo l’altro i file interessati, separati da uno spazio

grep stringadacercare fileditesto.txt fileditesto1.txt fileditesto2.txt

possiamo perรฒ utilizzare l’asterisco per semplificare il comando, dove possibile

grep 'stringa da cercare' fileditesto*

oppure cercare in tutti i file della stessa directory dove ci troviamo, grazie sempre alla wilcard “*” utilizzata nell’esempio precedente (e che tornerร  utile in mille altri modi)

grep 'stringa da cercare' *

ed estendere la ricerca in modo ricorsivo, ossia anche alle sotto-directory, con l’opzione -R, e limitandola ai soli files con estensione txt

grep -R 'stringa da cercare' *txt

Affinare la ricerca con grep

Tra le tante opzioni per migliorare le nostre ricerche, cheome abbiamo giร  visto in un paio di esempi vanno messe tre il comando grep e la stringa da cercare,ย alcune tornano molto utili e tra queste

  • – i (case insensitive) grep di suo e case sensitive, ossia per lui c’รจ una bella differenza tra minuscole e maiuscole. Con questa opzione la ricerca diventa case INsensitive, ossia minuscole o maiuscole tutto fa brodo.
  • -x grep cerca una stringa di testo, anche se questa fa parte di una stringa piรน complessa. Cioรจ se cerchiamo la stringa palo, grep ci riporterร  come buone anche le ricorrenze per palombaro, palombella e rippalo. Con l’opzione -x grep riporta solo le righe contenenti la parola completa, intera, ovvero solo palo.
  • -l questa opzione รจ utilissima quando ci interessa non tanto sapere quante ricorrenze all’interno di uno o piรน files, ma solo sapere quali sono i files contenenti eventuali ricorrenze, evitandoci un lungo output da ripulire.
  • -L uguale all’opzione precedente, ma riporta solo i nomi dei file dove la ricerca NON ha avuto successo.
  • -v (invert-match) utilizzando questa opzione si inverte la ricerca, ossia grep ci mostra tutte le righe che non contengono la stringa ricercata.

Cercare con grep piรน stringhe di testo contemporaneamente

Poniamo il caso di dover cercare due parole in uno o piรน documenti. รˆ una delle cose piรน recenti che mi รจ capitato di affrontare, e mi ha salvato l’operatore “\|”, obbligatorie le virgolette in questo caso.

Mettiamo il caso di dover cercare le (classiche) stringhe pippo o pluto, individuare cioรจ tutte le righe che contengono la stringa pippo o la stringa pluto, la sintassi del nostro comando sarร 

grep 'pippo\|pluto' fileditesto*.txt

la risposta sarร  una cosa simile a questa, dove vengono riportate le ricorrenze per ogni files

fileditesto.txt:pippo
fileditesto.txt:pluto
fileditesto1.txt:pippo
fileditesto1.txt:pluto
fileditesto2.txt:pluto
fileditesto2.txt:pippo

Cercare con grep: modificare il risultato della ricerca

Con grep รจ possibile modificare il modo in cui viene presentato il risultato della ricerca, ci sono molte opzioni per questo scopo.
Le piรน utili che ho individuato sono:

  • -n riporta il numero della riga per ogni ricorrenza
  • -c riporta il numero delle ricorrenze trovate
  • num (es. -10) riporta anche le num righe prima e dopo ogni ricorrenza trovata (nell’esempio 10 righe)
  • -A num (es. -A 10) riporta le num righe successive (after) di ogni ricorrenza trovata (nell’esempio 10 righe)
  • -B num (es. -B 10) riporta le num righe precedenti (before) di ogni ricorrenza trovata (nell’esempio 10 righe)
  • -h non riporta i nomi dei files quando la ricerca รจ effettuata su piรน files
  • -s non riporta i messaggi di errore per eventuali documenti non trovati o non leggibili

Per ora ci fermiamo qui, credo di aver messo giร  abbastanza carne sul fuoco per chi come me ha tutto da imparare con grep, anche perchรฉ con un minimo di padronanza con le opzioni fin qui descritte si possono giร  effettuare ricerche molto fruttuose.
Ho giร  in cantiere un secondo articolo su grep e le use opzioni, con qualcosina di piรน avanzato.

Nel frattempo, se anche voi volete arricchire questo “piccolo manualetto grep per dummies”, sarรฒ ben lieto di aggiungere i vostri suggerimenti, i commenti sono a vostra completa disposizione. ๐Ÿ˜‰

Picture credit: J. W. Baker

Condividi se ti รจ piaciuto!

Altri articoli che potrebbero interessarti:

Immagine di Roberto Rota

Roberto Rota

Libero professionista, un "artigiano del web", lavoro nella comunicazione in rete da quando esiste Internet. Mi occupo principalmente di assistenza su WordPress e assistenza e consulenza WooCommerce, seguo la realizzazione di progetti web, in particolare siti di e-commerce, visibilitร  e comunicazione in rete. Il mio curriculum รจ su Linkedin, e mi puoi trovare anche su Instagram, FaceBook e Twitter.

DAI IL TUO CONTRIBUTO

Se il mio lavoro ti รจ stato di aiuto, contribuisci alla continuitร  di questo sito.
Basta una piccola donazione su PayPal, una pizza e una birra alla tua salute!

4 risposte

  1. Grazie! Le segnalo un piccolo refuso, le opzioni -A e -B sono invertite, รจ facile anche ricordarlo perchรฉ sono le iniziali di After (dopo) e Before (prima)

Lascia un commento

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

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.