Introduzione
Il grep
comando (abbreviazione di G lobale R egular E xpressioni P rint) è un potente strumento di elaborazione del testo per la ricerca in file e directory.
Quando grep
è combinato con regex (reg ul ex pressioni), la ricerca avanzata e il filtraggio dell'output diventano semplici. Amministratori di sistema, sviluppatori e utenti regolari traggono vantaggio dalla padronanza dell'espressione regolare con grep
comando.
Questa guida ti insegna come grep
con regex tramite esempi.
Prerequisiti
- Accesso al terminale/riga di comando.
- Un file di testo in cui cercare. Gli esempi utilizzano .bashrc file.
- Utilizzo di base del comando grep.
Espressione regolare Grep
La sintassi per grep
comando include espressioni regolari nel seguente formato:
grep [regex] [file]
Le espressioni regolari sono semplici istruzioni che aiutano a filtrare dati e file. Molti comandi Linux, come il comando awk o il comando sed, usano anche espressioni regolari per trovare e manipolare le informazioni.
Due tipi di carattere generali costituiscono un'istruzione regex:
- Letterali , che sono caratteri di testo standard.
- Speciale caratteri o metacaratteri hanno un significato speciale a meno che non venga eseguito l'escape con una barra rovesciata (
\
).
Il grep
comando offre tre opzioni di sintassi regex:
1. Espressione regolare di base (BRE )
2. Espressioni regolari estese (ERE )
3. Espressioni regolari compatibili con Pearl (PCRE )
Per impostazione predefinita, grep
utilizza il BRE sintassi.
Esempio di espressione regolare Grep
Esegui il comando seguente per testare il funzionamento di grep regex:
grep if .bashrc
La regex cerca la stringa di caratteri. Il risultato mostra tutte le istanze in cui la lettera i
appare seguito da un f
nel .bashrc file. Pertanto, l'output evidenzia i seguenti risultati:
- se
- else
- nonse si
- identse sì
Il comando restituisce solo quelle righe in cui è presente una corrispondenza.
Come usare Regex con Grep
Regex offre molte possibilità per perfezionare le ricerche con grep
. Di seguito sono riportati alcuni esempi comuni che spiegano la sintassi e la logica di base. Combina le corrispondenze per creare istruzioni regex complesse.
Corrispondenze letterali
Le corrispondenze letterali eseguono una corrispondenza esatta per la stringa di caratteri specificata. L'espressione di esempio precedente per if
mostra una corrispondenza letterale.
La ricerca fa distinzione tra maiuscole e minuscole. Il comando seguente restituisce risultati diversi dall'esempio precedente:
grep If .bashrc
Per cercare più parole, aggiungi le virgolette:
grep "if the" .bashrc
L'omissione delle virgolette considera la seconda parola come un file o una posizione.
Fiammiferi di ancoraggio
Le corrispondenze di ancoraggio specificano la posizione della riga nella ricerca. Esistono due tipi di ancoraggio:
- Il segno di accento circonflesso (
^
) cerca le righe di corrispondenza che iniziano con l'espressione fornita. - Il simbolo del dollaro (
$
) cerca le righe di corrispondenza che terminano con il valore letterale fornito.
Ad esempio, per abbinare le righe che iniziano con la parola alias
nel .bashrc file, usa:
grep ^alias .bashrc
La ricerca non mostra righe con tabulazioni o spazi prima della parola.
Per abbinare le righe che terminano con la parola then
nel .bashrc file, esegui:
grep then$ .bashrc
Usa entrambe le ancore per creare un'istruzione regolare che cerchi una singola parola o istruzione in una riga:
grep ^esac$ .bashrc
Usa solo le ancore per trovare righe vuote in un file. Aggiungi il -n
opzione per mostrare i numeri di riga nell'output:
grep -n ^$ .bashrc
Senza il -n
opzione, l'output è vuoto.
Abbina qualsiasi personaggio
Il punto (.
) il metacarattere regolare corrisponde a qualsiasi carattere al posto del segno. Ad esempio:
grep r.o .bashrc
L'output mostra tutte le istanze della lettera r
, seguito da qualsiasi carattere, seguito da o
. Il punto può essere qualsiasi carattere, come una lettera, un numero, un segno o uno spazio.
Aggiungi più punti per indicare più segnaposto di caratteri:
grep r..t .bashrc
Combina con la corrispondenza di ancoraggio per creare un'istruzione regex complessa. Ad esempio:
grep ..t$ .bashrc
L'istruzione trova tutte le righe con due caratteri qualsiasi seguite dalla lettera t
alla fine.
Espressioni tra parentesi
Le espressioni tra parentesi consentono la corrispondenza di più caratteri o di un intervallo di caratteri in una posizione. Ad esempio, per abbinare tutte le righe che contengono and
o end
nel .bashrc file, utilizza il seguente modello:
grep [ae]nd .bashrc
Le espressioni tra parentesi consentono di escludere i caratteri aggiungendo l'accento circonflesso (^
) cartello. Ad esempio, per abbinare tutto tranne and
o end
, usa:
grep [^ae]nd .bashrc
Usa le espressioni tra parentesi per specificare un intervallo di caratteri aggiungendo un trattino (-
) tra la prima e l'ultima lettera. Ad esempio, cerca tutte le istanze di lettere maiuscole:
grep [A-Z] .bashrc
Combina le espressioni tra parentesi con la corrispondenza di ancoraggio per trovare tutte le parole che iniziano con lettere maiuscole:
grep ^[A-Z] .bashrc
Le espressioni tra parentesi consentono più intervalli. Ad esempio, abbina tutti i caratteri non alfabetici con:
grep [^a-zA-Z] .bashrc
L'output evidenzia numeri e caratteri, ignorando tutte le lettere.
Classi di personaggi
Grep offre classi di caratteri standard come funzioni predefinite per semplificare le espressioni tra parentesi. Di seguito è riportata una tabella che delinea alcune classi e l'equivalente dell'espressione tra parentesi.
Sintassi | Descrizione | Equivalente |
---|---|---|
[[:alnum:]] | Tutte le lettere e i numeri. | "[0-9a-zA-Z]" |
[[:alpha:]] | Tutte le lettere. | "[a-zA-Z]" |
[[:blank:]] | Spazi e schede. | [CTRL+V<TAB> ] |
[[:digit:]] | Cifre da 0 a 9. | [0-9] |
[[:lower:]] | Lettere minuscole. | [a-z] |
[[:punct:]] | Punteggiatura e altri caratteri. | "[^a-zA-Z0-9]" |
[[:upper:]] | Lettere maiuscole. | [A-Z] |
[[:xdigit:]] | Cifre esadecimali. | "[0-9a-fA-F]" |
L'elenco completo delle classi di caratteri grep è nel manuale di grep.
Quantificatori
I quantificatori sono metacaratteri che specificano il numero di aspetti. La tabella seguente mostra la sintassi di ogni quantificatore grep con una breve descrizione.
Sintassi | Descrizione |
---|---|
* | Zero o più corrispondenze. |
? | Zero o una corrispondenza. |
+ | Una o più corrispondenze. |
{n} | n partite. |
{n,} | n o più corrispondenze. |
{,m} | Fino a m partite. |
{n,m} | Da n fino a m partite. |
Il *
il segno corrisponde a un modello zero o più volte. Per dimostrare, esegui il seguente comando:
grep m*and .bashrc
In questo caso, il *
il segno corrisponde alla lettera m
zero o più volte. Pertanto "and
, mand
, mmand
" sono tutte corrispondenze. La lettera m
si ripete un numero qualsiasi di volte se seguito dal *
firmare.
Per abbinare zero o esattamente una corrispondenza, utilizza il ?
cartello. Racchiudere l'affermazione tra virgolette singole ed evitare il carattere per evitare interpretazioni. Ad esempio:
grep 'm\?and' .bashrc
In alternativa, usa le espressioni regolari estese per evitare l'escape:
grep -E 'm?and' .bashrc
L'output evidenzia tutte le istanze di and
o mand
.
Usa i quantificatori di intervallo per specificare un numero esatto di ripetizioni. Ad esempio, cerca le stringhe con due vocali:
grep '[aeiouAEIOU]\{2\}' .bashrc
grep -E '[aeiouAEIOU]{2}' .bashrc
L'output evidenzia tutte le parole con due vocali.
Alternanza
L'alternanza consente di definire corrispondenze alternative. Racchiudi le stringhe alternative tra virgolette singole e separa ciascuna con un carattere pipe con escape (\|
).
Ad esempio, per cercare le parole bash
o alias
nel .bashrc file, usa:
grep 'bash\|alias' .bashrc
In alternativa, usa la regex estesa e ometti il carattere di escape:
grep -E 'bash|alias' .bashrc
L'output evidenzia entrambe le istanze di stringa nel file.
Raggruppamento
Le espressioni regolari consentono di raggruppare i modelli in un unico elemento. Metti il gruppo tra parentesi con escape per l'espressione regolare regolare o usa esteso.
Ad esempio, cerca la stringa bashrc
e crea il rc
caratteri facoltativi:
grep 'bash\(rc\)\?' .bashrc
grep -E 'bash(rc)?' .bashrc
L'output evidenzia tutte le istanze di bashrc
. Dal momento che rc
è opzionale, il comando corrisponde anche alla parola bash
.
Espressioni speciali della barra rovesciata
Il comando grep offre alcune espressioni di backslash uniche per la corrispondenza avanzata dei confini delle parole. Di seguito è riportata una tabella con brevi esempi per ciascun tipo di espressione.
Sintassi | Esempio | Corrispondenze (Il testo in grassetto rappresenta le corrispondenze) |
---|---|---|
\b | '\band\b' | e "e " \e \ |
\B | '\Band' | _e _e _ se he si |
\< | '\e | "e " e y e _ |
\> | 'and\>' | e "e" se _e |
\w | '\wand' | _e _e _ mano y sabbia |
\W | '\Wand' | "e " /e / |
\s | '\sand' | |
\S | '\Sand' | _e "e " sabbia mano y _e _ /e / |
Ad esempio, usa \b
confini per individuare una parola che non fa parte di un'altra parola:
grep '\bse[et]\b' .bashrc
L'espressione individua le parole see
e set
. Il confine garantisce l'isolamento delle parole.
Metacaratteri in fuga
I metacaratteri di escape trattano i caratteri speciali come letterali. Ad esempio, per cercare un punto (.) alla fine di una riga, esegui l'escape del metacarattere:
grep '\.$' .bashrc
Non consentire l'interpretazione dei caratteri aiuta durante la ricerca nel codice sorgente o nei file di configurazione.