GNU/Linux >> Linux Esercitazione >  >> Linux

Espressioni regolari avanzate nel comando Grep con 10 esempi - Parte II

Nel nostro precedente articolo sulle espressioni regolari, parte 1, abbiamo esaminato la reg-ex di base con esempi pratici.

Ma possiamo fare molto di più con le espressioni regolari. Spesso è possibile eseguire attività complesse con una singola espressione regolare invece di scrivere più righe di codice.

Quando si applica un'espressione regolare a una stringa, il motore dell'espressione regolare si avvia dal primo carattere della stringa. Proverà tutte le possibili permutazioni dell'espressione regolare al primo carattere. Solo se tutte le possibilità sono state provate e risultano fallite, il motore regex continuerà con il secondo carattere nel testo.

La regex proverà tutte le possibili permutazioni della regex, esattamente nello stesso ordine. Il risultato è che il motore regex-directed restituirà la corrispondenza più a sinistra.

In questo articolo, esaminiamo alcune espressioni regolari avanzate con esempi.

Esempio 1. Operazione OR (|)

Il carattere pipe (|) in grep viene utilizzato per specificare che una delle due sottoespressioni intere si trova in una posizione. "sottoespressione1|sottoespressione2" corrisponde a sottoespressione1 o sottoespressione2.

L'esempio seguente rimuoverà tre diversi tipi di righe di commento in un file utilizzando OR in un comando grep.

Innanzitutto, crea un file di esempio chiamato "commenti".

$ cat comments
This file shows the comment character in various programming/scripting languages
### Perl / shell scripting
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
' VB Scripting comment
The line should start with a single quote to comment in VB scripting.
// C programming single line comment.
Double slashes in the beginning of the line for single line comment in C.

Il file chiamato "commenti" ha righe di commento perl, script VB e programmazione C. Ora il seguente comando grep cerca la riga che non inizia con # o virgolette singole (') o doppie barre (//).

$ grep  -v "^#\|^'\|^\/\/" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Esempio 2. Espressione di classe di caratteri

Come abbiamo visto nel nostro precedente articolo regex, esempio 9, l'elenco dei caratteri può essere menzionato tra parentesi quadre in modo che corrisponda solo a uno su più caratteri. Il comando Grep supporta alcune classi di caratteri speciali che denotano determinati intervalli comuni. Pochi di loro sono elencati qui. Fare riferimento alla pagina man di grep per conoscere le varie espressioni di classi di caratteri.

[:digit:] 	Only the digits 0 to 9
[:alnum:] 	Any alphanumeric character 0 to 9 OR A to Z or a to z.
[:alpha:] 	Any alpha character A to Z or a to z.
[:blank:] 	Space and TAB characters only.

Questi sono sempre utilizzati all'interno di parentesi quadre nella forma [[:digit:]]. Ora eseguiamo il grep di tutti gli ID di processo del processo daemon ntpd usando un'espressione di classe di caratteri appropriata.

$ grep -e "ntpd\[[[:digit:]]\+\]" /var/log/messages.4
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 28 12:33:31 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 12:50:46 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 29 07:55:29 gstuff1 ntpd[2241]: time reset -0.180737 s

Esempio 3. Da M a N occorrenze ({m,n})

Un'espressione regolare seguita da {m,n} indica che l'elemento precedente ha una corrispondenza almeno m volte, ma non più di n volte. I valori di m e n devono essere non negativi e inferiori a 255.

L'esempio seguente stampa la riga se è compresa tra 0 e 99999.

$ cat  number
12
12345
123456
19816282

$ grep  "^[0-9]\{1,5\}$" number
12
12345

Il file chiamato "numero" ha l'elenco dei numeri, il comando grep sopra corrisponde solo al numero che va da 1 (il minimo è 0) a 5 cifre (massimo 99999).

Nota :per esempi di comandi grep di base, leggi 15 Esempi pratici di comandi Grep.

Esempio 4. Occorrenza M esatta ({m})

Un'espressione regolare seguita da {m} corrisponde esattamente a m occorrenze dell'espressione precedente. Il seguente comando grep visualizzerà solo il numero che ha 5 cifre.

$ grep  "^[0-9]\{5\}$" number
12345

Esempio 5. M o più occorrenze ({m,})

Un'espressione regolare seguita da {m,} corrisponde a m o più occorrenze dell'espressione precedente. Il seguente comando grep visualizzerà il numero che ha 5 o più cifre.

$ grep "[0-9]\{5,\}" number
12345
123456
19816282

Nota :Sapevi che puoi usare il comando bzgrep per cercare una stringa o un pattern (espressione regolare) su file compressi bzip2.

Esempio 6. Limite di parole (\b)

\b corrisponde a un limite di parola. \b corrisponde a qualsiasi carattere all'inizio (\bxx) e/o alla fine (xx\b) di una parola, quindi \bil\b troverà il ma non quello, ma \blo troverà.

# grep -i "\bthe\b" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Esempio 7. Riferimenti arretrati (\n)

Il raggruppamento delle espressioni per un ulteriore utilizzo è disponibile in grep tramite i riferimenti a ritroso. Ad esempio, \([0-9]\)\1 corrisponde a un numero a due cifre in cui entrambe le cifre sono lo stesso numero come 11,22,33 ecc.,

# grep -e '^\(abc\)\1$'
abc
abcabc
abcabc

Nel comando grep sopra, accetta l'input STDIN. quando legge l'input "abc" non corrisponde, La riga "abcabc" corrisponde all'espressione data, quindi viene stampata. Se si desidera utilizzare l'espressione regolare estesa, è sempre preferibile utilizzare il comando egrep. grep con l'opzione -e funziona anche come egrep, ma devi evitare i caratteri speciali come le parentesi.

Nota :puoi anche usare il comando zgrep per cercare all'interno di un file compresso gz.

Esempio 8. Abbina il modello "Orientato all'oggetto"

Finora abbiamo visto diversi suggerimenti nel comando grep, ora usando questi suggerimenti, abbiniamo "orientato agli oggetti" in vari formati.

$ grep "OO\|\([oO]bject\( \|\-\)[oO]riented\)"

Il comando grep sopra corrisponde a "OO", "orientato agli oggetti", "orientato agli oggetti" e così via,

Esempio 9. Stampa la riga “vocale singlecharacter samevowel”

Il seguente comando grep stampa tutte le righe contenenti una vocale (a, e, i, o o u) seguita da un singolo carattere seguito di nuovo dalla stessa vocale. Quindi troverà eve o adam ma non vera.

$ cat input
evening
adam
vera

$ grep "\([aeiou]\).\1" input
evening
adam

Esempio 10. Indirizzo IP valido

Il seguente comando grep corrisponde solo all'indirizzo IP valido.

$ cat input
15.12.141.121
255.255.255
255.255.255.255
256.125.124.124

$ egrep  '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' input
15.12.141.121
255.255.255.255

Nell'espressione regolare data sopra, ci sono condizioni diverse. Queste partite condizionate dovrebbero verificarsi tre volte e un'altra classe viene menzionata separatamente.

  1. Se inizia con 25, il numero successivo dovrebbe essere compreso tra 0 e 5 (da 250 a 255)
  2. Se inizia con 2, il numero successivo potrebbe essere 0-4 seguito da 0-9 (da 200 a 249)
  3. zero occorrenze di 0 o 1, 0-9, quindi zero occorrenze di qualsiasi numero compreso tra 0-9 (da 0 a 199)
  4. Quindi carattere punto

Per la prima parte di questo articolo, leggi Espressioni regolari in Grep Command con 10 esempi – Parte I


Linux
  1. Comando wc Linux con esempi

  2. Comando Nohup con esempi

  3. Comando JQ in Linux con esempi

  4. Espressioni regolari nel comando Grep con 10 esempi - Parte I

  5. Come si usano le espressioni regolari con il comando cp in Linux?

15 Comando Linux ps con esempi

Utilizzo del comando GREP in Linux con esempi

Il tutorial sul comando Grep con esempi per principianti

Comando della cronologia con esempi

Comando Grep in Linux (con esempi)

10 esempi pratici di regex con grep