Ricerca nel sito web

Esempi di comandi grep in Linux


Grep è un comando utile per aiutarti a cercare e trovare rapidamente il contenuto dei file.

"Tutto è un file in Linux" e questo è il motivo per cui la maggior parte degli utenti Linux dedica gran parte del tempo ad armeggiare con il contenuto del file.

È qui che l'importanza del comando grep gioca un ruolo cruciale consentendoti di cercare e abbinare modelli all'interno di file di testo o ottenere un output.

Quindi, in questo tutorial, ti guiderò attraverso tutti gli elementi essenziali necessari per imparare il comando grep:

  • La sintassi di base e i flag più diffusi del comando

  • Esempi pratici del comando

  • Domande pratiche per il comando grep

Ecco come utilizzare il comando grep

Per utilizzare il comando grep è importante conoscere la sintassi.

Quindi ecco la sintassi di base del comando grep:

grep [OPTIONS] PATTERN <Filename>

Qui,

  • [OPTIONS]: utilizzando il set di opzioni fornito, puoi modificare il comportamento predefinito del comando grep, ad esempio utilizzando -i per abilitare la ricerca senza distinzione tra maiuscole e minuscole.

  • PATTERN: qui è dove specifichi il testo che stai cercando dal file o dall'output del comando. Può anche essere un'espressione regolare per modelli più complessi.

  • : qui specifichi il file in cui vuoi cercare e se non specifichi alcun file la ricerca verrà effettuata dall'input standard.

Ora diamo un'occhiata ad alcune opzioni comunemente utilizzate con il comando grep:

-i

Ignora la distinzione tra maiuscole e minuscole nella ricerca.

-v

Stampa le linee che non corrispondono al motivo.

-n

Visualizza il numero di riga di ciascuna riga corrispondente.

-w

Corrisponde solo a parole intere, non a parti di parole.

-c

Conta il numero di righe corrispondenti, non stampa le righe.

-r

Cerca nelle directory in modo ricorsivo.

-A n

Stampa n righe dopo ciascuna riga corrispondente.

-B n

Stampa n righe prima di ciascuna riga corrispondente.

-C n

Stampa n righe prima e dopo ciascuna riga corrispondente.

-f Filename

Legge i modelli di ricerca da un file, uno per riga.

-o

Stampa solo la parte corrispondente della linea.

Forse ti starai chiedendo: cosa succede quando usi il comando grep senza alcuna opzione? Bene, stampa semplicemente le linee contenenti il modello.

Ad esempio, qui, voglio cercare la parola chiave error all'interno del file denominato error.log e, senza alcuna opzione aggiuntiva, mi ha dato questo output:

Hai visto che? Evidenzia il motivo trovato e stampa anche le righe contenenti il motivo.

Per rendere questo tutorial facile da seguire, utilizzerò un file di esempio denominato error.log che include le seguenti righe:

This is a log file with various messages.
An error occurred at 10:00 AM.
The system encountered an unexpected issue.
Everything is working normally now.
Another error message at 11:30 AM.
Warning: Please check disk usage.
Log closed at 12:00 PM

Esempi pratici del comando grep

In questa sezione tratterò vari esempi del comando grep in modo che tu possa avere un'idea migliore di come utilizzare il comando grep.

1. Ricerca senza distinzione tra maiuscole e minuscole

Per impostazione predefinita, i modelli di comando grep fanno distinzione tra maiuscole e minuscole e, nella maggior parte dei casi, funzionano bene, ma potresti voler disattivare la distinzione tra maiuscole e minuscole.

Per fare ciò, puoi utilizzare il flag -i come mostrato qui:

grep -i PATTERN Filename

Per dimostrarlo, userò ERROR come modello di ricerca e mostrerà i modelli corrispondenti indipendentemente dalla distinzione tra maiuscole e minuscole:

grep -i ERROR error.log

2. Mostra n righe prima e dopo le righe corrispondenti

Per impostazione predefinita, il comando grep stampa solo le righe corrispondenti, ma a volte è necessario il contesto delle righe corrispondenti. Quindi stampi le righe prima e dopo le righe corrispondenti.

Stampa n righe prima delle righe corrispondenti

Per stampare n numero di righe prima della corrispondenza delle righe, utilizza il flag -B e specifica il numero di righe da stampare come mostrato qui:

grep -B <number_of_lines> PATTERN Filename

Ad esempio, qui, ho stampato la riga prima di ogni riga corrispondente:

grep -B 1 error error.log 

Stampa n righe dopo le righe corrispondenti

Per stampare il numero n di righe dopo le righe corrispondenti, utilizza il flag -A e specifica il numero di righe come mostrato qui:

grep -A <number_of_lines> PATTERN Filename

Se voglio stampare una riga dopo le righe corrispondenti, utilizzerò quanto segue:

grep -A 1 error error.log

Stampa n righe prima e dopo le righe corrispondenti

Se vuoi stampare le righe prima e dopo, usa il flag -C e specifica il numero di righe da stampare come mostrato qui:

grep -C <number_of_lines> PATTERN Filename

Diciamo che voglio visualizzare 1 riga prima e 1 riga dopo la riga del modello corrispondente, quindi utilizzerò quanto segue:

grep -C 1 error error.log

3. Mostra le linee che non corrispondono al modello

Nella maggior parte dei casi utilizzerai il comando grep per abbinare i modelli, ma ti consente anche di invertire i risultati della ricerca.

In termini semplici, specifichi il termine di ricerca e verranno stampate le righe che non corrispondono al modello specificato e, a tale scopo, utilizzi il flag -v come mostrato qui:

grep -v PATTERN Filename

Ad esempio, se voglio stampare ogni riga che non contiene il termine error, utilizzerò quanto segue:

grep -v error error.log

4. Visualizza il numero di righe corrispondenti

Per visualizzare il numero di righe corrispondenti, tutto ciò che devi fare è utilizzare il flag -n come mostrato:

grep -n PATTERN Filename

5. Visualizza il numero totale di risultati corrispondenti

Se vuoi conoscere il numero di risultati corrispondenti, puoi utilizzare il flag -c come mostrato:

grep -c PATTERN Filename

Ad esempio, qui, volevo sapere quante volte il termine error è menzionato nel file error.log, quindi ho usato il seguente comando:

grep -c error error.log

6. Cerca un modello in più file

Se desideri cercare uno schema da più file, tutto ciò che devi fare è aggiungere più file alla ricerca, come mostrato qui:

grep PATTERN File1 File2

Ad esempio, qui, ho cercato la stringa error da due file: error.log e error.txt e ho ottenuto il seguente output :

grep error error.log error.txt

7. Modello di ricerca da ogni file nella directory

Se desideri cercare un modello specifico da ogni file presente nella directory, puoi utilizzare il comando grep in modo ricorsivo e cercherà il modello specificato da ogni file presente in quella directory specifica.

Per abilitare la ricerca ricorsiva, utilizza il flag -r come mostrato:

grep -r PATTERN <Directory or path to directory>

Ad esempio, qui ho cercato la stringa error nella directory corrente:

grep -r error .

8. Cerca la parola esatta

Per impostazione predefinita, il comando grep stamperà tutti i modelli corrispondenti, che non è quello che desideri sempre. Sembra strano? Permettimi di spiegare.

Supponiamo di voler cercare il termine Orange ma se il file specifico contiene anche il termine Oranges allora anche la riga contenente il termine Oranges sarà mostrato come output.

Per superare questo problema, puoi utilizzare l'opzione -w e specificare il modello:

grep -w PATTERN Filename

Ad esempio, qui, intendo trovare il termine err quindi userò il flag -w e ti mostrerò anche la differenza tra ciò che accade quando non usi Esso.

grep -w err error.log

Quando ho usato il flag -w per trovare la stringa err, non ha restituito risultati, poiché non esiste.

Ma nel secondo tentativo in cui ho rimosso il flag -w, ha restituito due risultati che mostravano contenuto in cui il modello di stringa è parte di un'altra stringa (non separata).

9. Utilizza il modello regex per la ricerca avanzata

Se la ricerca normale non rende giustizia, puoi utilizzare il modello regex (sequenza di caratteri) per avere un migliore controllo sulla tua ricerca. Puoi utilizzare il flag -e per utilizzare il modello regex, mentre -E ti consente di utilizzare la regex estesa:

grep -e/-E PATTERN Filename

Ad esempio, qui ho usato la regex estesa per trovare due vocali usate insieme nel file:

grep -e '[aeiouAEIOU]{2}' error.log

Lettura consigliata 📖

10. Specificare più modelli utilizzando l'operatore OR

È possibile utilizzare l'operatore OR per specificare più modelli, il che è molto utile quando si desidera cercare più modelli in modo efficiente.

Per specificare più modelli, utilizzare l'operatore OR (|) nel modo seguente:

grep 'PATTERN_1\|PATTERN_2' Filename
💡
È possibile premere il tasto Maiusc + barra rovesciata per ottenere l'operatore OR.

Diciamo che desidero cercare due modelli: error e Please, quindi utilizzerò quanto segue:

grep 'error\|Please' error.log

Domande pratiche 📓

Fare pratica è il modo migliore per imparare, ed è per questo che sto per condividere alcune domande pratiche per il comando grep.

Puoi utilizzare il file error.log di cui ho parlato all'inizio di questa guida per risolvere le seguenti domande:

  1. Trova la stringa error da ogni file presente nella tua directory di lavoro.

  2. Trova le righe che non contengono il termine success.

  3. Cerca le righe in un file che contengono error o issue.

  4. Trova il termine log disabilitando la ricerca con distinzione tra maiuscole e minuscole e reindirizzando l'output su un file.

  5. Come si stampano solo gli ultimi 2 risultati ignorando tutto il resto? (Suggerimento: usa il comando tail)

Se riscontri difficoltà nel risolvere i problemi di cui sopra, contattaci tramite i commenti o pubblica la tua domanda nel forum della nostra community.

Puoi scaricare un cheat sheet del comando grep per ulteriori esempi e informazioni:

Sei un utente avanzato? Prova ripgrep

Il comando ripgrep fa tutto ciò che fa il comando grep ma presenta alcuni vantaggi aggiuntivi come prestazioni e funzionalità inclusa la possibilità di effettuare ricerche all'interno del file zip.

Figo? Ecco come installare e utilizzare ripgrep in Linux:

Inoltre, se sei nuovo su Linux, ti suggerisco di seguire anche il nostro tutorial sui comandi per principianti.

💬Condividi i tuoi pensieri sul comando, la tua esperienza con esso e cosa preferisci come alternativa a grep?

Articoli correlati: