Introduzione
Grep è una potente utility disponibile per impostazione predefinita sui sistemi basati su UNIX. Il nome sta per Global Regular Expression Print.
Usando il grep
comando, è possibile personalizzare il modo in cui lo strumento ricerca un motivo o più motivi in questo caso. È possibile eseguire il grep di più stringhe in file e directory diversi. Lo strumento stampa tutte le righe che contengono le parole specificate come modello di ricerca.
In questa guida, ti mostreremo come utilizzare grep per cercare più parole o schemi di stringhe . Segui gli esempi in questo tutorial per imparare a utilizzare grep nel modo più efficace.
Prerequisiti
- Sistema Linux o simile a UNIX
- Accesso a un terminale oa una riga di comando
- Un utente con i permessi per accedere ai file e alle directory necessari
Come eseguire il Grep di più pattern – Sintassi
La sintassi di base di grep durante la ricerca di più pattern in un file include l'utilizzo di grep
comando seguito da stringhe e dal nome del file o dal suo percorso.
I modelli devono essere racchiusi tra virgolette singole e separati dal simbolo della barra verticale. Usa la barra rovesciata prima del pipe | per le espressioni regolari.
grep 'pattern1\|pattern2' fileName_or_filePath
L'ultimo modo per usare grep è con -E
opzione. Questa opzione tratta il modello utilizzato come un'espressione regolare estesa .
grep -E 'pattern1|pattern2' fileName_or_filePath
La versione obsoleta di grep esteso è egrep .
egrep 'pattern1|pattern2' fileName_or_filePath
Un'altra opzione consiste nell'aggiungere più pattern separati a grep
comando.
Per farlo, usa il -e
contrassegnare e continuare ad aggiungere il numero desiderato di modelli di ricerca:
grep -e pattern1 -e pattern2 fileName_or_filePath
Qual è la differenza tra grep, grep -E ed egrep?
Il egrep
comando è una versione obsoleta di grep esteso. Svolge la stessa funzione di grep -E
.
La differenza tra grep e grep esteso è che grep esteso include meta caratteri che sono stati aggiunti in seguito.
Questi caratteri sono la parentesi () , parentesi graffe {} e punto interrogativo . Il carattere pipe | viene anche trattato come un metacarattere in grep esteso.
Esempi di utilizzo di Grep per più stringhe, pattern e parole
Per essere sicuro di capire come utilizzare grep per cercare più stringhe, ti suggeriamo di creare un file con del testo su cui proveremo un paio di casi d'uso diversi.
Nel nostro caso, abbiamo chiamato il file sample.txt e aggiunto alcuni paragrafi di testo. Abbiamo archiviato il file nella directory del test utente, ovvero in /home/test/sample.txt
Come greppare più pattern in un file
Negli esempi seguenti, useremo grep invece di grep esteso. Non dimenticare di usare la barra rovesciata prima del carattere pipe .
Poiché grep non supporta il simbolo pipe come operatore di alternanza, è necessario utilizzare il carattere di escape (barra rovesciata \) per dire a grep
comando per trattare la tubazione in modo diverso.
Ad esempio, per cercare le parole extra e valore nel sample.txt file usa questo comando:
grep 'extra\|value' sample.txt
L'output evidenzia la stringa che volevi grep.
Se lo stesso file si trova in un'altra directory , devi passare a quella directory o utilizzare il percorso completo del file:
grep 'extra\|value' /home/test/Desktop/sample.txt
Per cercare più di due parole , continua ad aggiungerli allo stesso modo.
Ad esempio, per cercare tre parole, aggiungi la stringa di caratteri desiderata seguita da una barra rovesciata e una pipe:
grep 'extra\|value\|service' sample.txt
Vediamo come appare il comando grep sopra quando usi grep -E
, egrep
e grep -e
:
grep -E ‘extra|value|service’ sample.txt
egrep ‘extra|value|service’ sample.txt
grep -e extra -e value -e service sample.txt
Useremo grep
in ulteriori esempi, ma puoi usare la sintassi che preferisci.
Cerca più corrispondenze esatte in un file
Se vuoi trovare corrispondenze esatte per più pattern, passa il -w
segnala al grep
comando.
grep -w 'provide\|count' sample.txt
Ad esempio, l'output seguente mostra la differenza tra la ricerca senza -w
e con esso:
Come puoi vedere, i risultati sono diversi. Il primo comando mostra tutte le righe con le stringhe che hai usato.
Il secondo comando mostra come grep corrispondere corrispondenze esatte per più stringhe. L'output stampa solo le righe che contengono le parole esatte.
Ignora maiuscole e minuscole quando usi Grep per più stringhe
Per evitare di perdere qualcosa quando cerchi più pattern, usa il -i
flag per ignorare le maiuscole e minuscole.
Ad esempio, ignoreremo il caso con questo comando:
grep -i 'phoenix\|linux' sample.txt
L'output mostra come differiscono i due comandi. Se includi il -i
contrassegna e ignora le maiuscole e minuscole, il risultato per più corrispondenze include tutte le corrispondenze.
In questo modo, ottieni risultati aggiuntivi. Se aggiungi anche il -w
flag a questo comando, puoi restringere ulteriormente i risultati:
Mostra il conteggio di più corrispondenze in un file
Supponiamo che tu stia monitorando un file di registro e desideri vedere se il numero di avvisi o messaggi aumenta. Non vuoi vedere risultati dettagliati quando viene restituito un gran numero di partite.
Ad esempio, per mostrare il conteggio di più corrispondenze in bootstrap.log file, inserisci:
grep -c 'warning\|error' /var/log/bootstrap.log
L'output stampa il numero di corrispondenze. In questo modo, puoi determinare rapidamente se il numero di avvisi ed errori è aumentato.
Grep per più modelli in un tipo di file specifico
Puoi usare grep per cercare più stringhe solo in un determinato tipo di file. Se desideri monitorare i file di registro in una directory o se desideri eseguire la ricerca in tutti i file di testo, utilizza un asterisco e l'estensione del file invece del nome di un file.
Ad esempio, per cercare avvisi ed errori in tutti i .log file in /var/log/ directory, immettere:
grep 'warning\|error' /var/log/*.log
Per dimostrare meglio come funziona questa opzione, mostreremo solo il conteggio delle corrispondenze.
L'output mostra tutti i file che grep ha cercato per le stringhe che hai usato.
Cerca ricorsivamente più pattern in un file
Il grep
Il comando esegue la ricerca solo nella directory corrente quando si utilizza il carattere jolly asterisco.
Per includere tutte le sottodirectory durante la ricerca di più pattern, aggiungi il -R
operatore a grep:
grep -R 'warning\|error' /var/log/*.log
L'output restituirà risultati da tutti i file grep
comando trovato in /var/log/ directory e le sue sottodirectory.