grep
è un potente strumento da riga di comando che consente di cercare in uno o più file di input le righe che corrispondono a un'espressione regolare e di scrivere ciascuna riga corrispondente nell'output standard.
In questo articolo, ti mostreremo come usare GNU grep
per cercare più stringhe o pattern.
Grep più pattern #
GNU grep
supporta tre sintassi di espressioni regolari, Basic, Extended e compatibile con Perl. Quando non viene specificato alcun tipo di espressione regolare, grep
interpreta i modelli di ricerca come espressioni regolari di base.
Per cercare più pattern, usa l'operatore OR (alternanza).
L'operatore di alternanza |
(pipe) consente di specificare diverse possibili corrispondenze che possono essere stringhe letterali o set di espressioni. Questo operatore ha la precedenza più bassa di tutti gli operatori di espressioni regolari.
La sintassi per la ricerca di più pattern usando grep
le espressioni regolari di base sono le seguenti:
grep 'pattern1\|pattern2' file...
Racchiudi sempre l'espressione regolare tra virgolette singole per evitare l'interpretazione e l'espansione dei metacaratteri da parte della shell.
Quando si utilizzano espressioni regolari di base, i metacaratteri vengono interpretati come caratteri letterali. Per mantenere i significati speciali dei metacaratteri, è necessario eseguire l'escape con una barra rovesciata (\
). Questo è il motivo per cui stiamo eseguendo l'escape dell'operatore OR (|
) con una barra.
Per interpretare il modello come un'espressione regolare estesa, invoca grep
il -E
( o --extended-regexp
) opzione. Quando si utilizza un'espressione regolare estesa, non eseguire l'escape di |
operatore:
grep -E 'pattern1|pattern2' file...
Per ulteriori informazioni su come costruire espressioni regolari, consulta il nostro articolo Grep regex.
Grep più stringhe #
Le stringhe letterali sono i modelli più elementari.
Nell'esempio seguente, stiamo cercando tutte le occorrenze delle parole fatal
, error
e critical
nel file loggerror di Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
Se la stringa che stai cercando include spazi, racchiudila tra virgolette doppie.
Ecco lo stesso esempio che utilizza l'espressione regolare estesa, che elimina la necessità di eseguire l'escape dell'operatore |
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Per impostazione predefinita, grep
fa distinzione tra maiuscole e minuscole. Ciò significa che i caratteri maiuscoli e minuscoli vengono trattati come distinti.
Per ignorare maiuscole e minuscole durante la ricerca, invoca grep with
il -i
opzione (o --ignore-case
):
grep -i 'fatal\|error\|critical' /var/log/nginx/error.log
Durante la ricerca di una stringa, grep
visualizzerà tutte le righe in cui la stringa è incorporata in stringhe più grandi. Quindi, se stavi cercando "errore", grep
stamperà anche le righe in cui "errore" è incorporato in parole più grandi, come "senza errori" o "antiterroristi".
Per restituire solo quelle righe in cui la stringa specificata è una parola intera (racchiusa da caratteri non di parola), usa il -w
( o --word-regexp
) opzione:
grep -w 'fatal\|error\|critical' /var/log/nginx/error.log
I caratteri delle parole includono caratteri alfanumerici (a-z, A-Z e 0-9) e trattini bassi (_). Tutti gli altri caratteri sono considerati caratteri non di parole.
Per maggiori dettagli su grep
opzioni, visita il nostro articolo Comando Grep.
Conclusione #
Ti abbiamo mostrato come grep
per cercare più pattern, stringhe e parole.
Se hai domande o feedback, sentiti libero di lasciare un commento.