Come usare le espressioni awk e regolari per filtrare testo o stringhe nei file

instagram story viewer

Quando eseguiamo determinati comandi in Unix/Linux per leggere o modificare il testo da una stringa o da un file, la maggior parte delle volte proviamo a filtrare l'output in una determinata sezione di interesse. È qui che l'uso delle espressioni regolari torna utile.

Leggi anche:10 utili operatori di concatenamento Linux con esempi pratici

Cosa sono le espressioni regolari?

Un'espressione regolare può essere definita come una stringa che rappresenta diverse sequenze di caratteri. Una delle cose più importanti delle espressioni regolari è che ti consentono di filtrare l'output di un comando o di un file, modificare una sezione di un file di testo o di configurazione e così via.

Caratteristiche dell'espressione regolare

Le espressioni regolari sono costituite da:

  1. Personaggi ordinari come spazio, trattino basso (_), A-Z, a-z, 0-9.
  2. Meta caratteri che sono espansi a caratteri ordinari, includono:
    1. (.) corrisponde a qualsiasi singolo carattere eccetto una nuova riga.
    2. (*) corrisponde a zero o più esistenze del carattere immediato che lo precede.
    3. [ caratteri) ] corrisponde a uno qualsiasi dei caratteri specificati in carattere (i), si può anche usare un trattino (-) per indicare un intervallo di caratteri come [a-f], [1-5], e così via.
    4. ^ corrisponde all'inizio di una riga in un file.
    5. $ corrisponde alla fine della riga in un file.
    6. \ è un carattere di fuga.

Per filtrare il testo, è necessario utilizzare uno strumento di filtraggio del testo come awk. Puoi pensare a awk come linguaggio di programmazione a sé stante. Ma per lo scopo di questa guida all'uso awk, lo tratteremo come un semplice strumento di filtraggio della riga di comando.

La sintassi generale di awk è:

# awk 'script' nome file. 

In cui si 'sceneggiatura' è un insieme di comandi che sono compresi da awk e vengono eseguiti su file, nomefile.

Funziona leggendo una determinata riga nel file, fa una copia della riga e quindi esegue lo script sulla riga. Questo viene ripetuto su tutte le righe del file.

Il 'sceneggiatura' è nella forma '/modello/ azione' dove modello è un'espressione regolare e il azione è ciò che farà awk quando troverà il modello dato in una linea.

Come utilizzare lo strumento di filtraggio Awk in Linux

Negli esempi seguenti, ci concentreremo sui metacaratteri che abbiamo discusso sopra sotto le caratteristiche di awk.

Un semplice esempio di utilizzo di awk:

L'esempio sotto stampa tutte le righe nel file /etc/hosts poiché non viene fornito alcun modello.

# awk '//{print}'/etc/hosts. 
Awk stampa tutte le righe in un file
Awk stampa tutte le righe in un file

Usa Awk con Pattern:

I l'esempio qui sotto, un modello localhost è stato dato, quindi awk corrisponderà alla presenza di una linea localhost nel /etc/hosts file.

# awk '/localhost/{print}' /etc/hosts 
Stampa awk data la linea corrispondente in un file
Stampa awk data la linea corrispondente in un file

Utilizzo di Awk con (.) carattere jolly in uno schema

Il (.) corrisponderà a stringhe contenenti posizione, localhost, rete locale nell'esempio sotto.

Vale a dire * l qualche_singolo_carattere c *.

# awk '/l.c/{print}' /etc/hosts. 
Usa Awk per stampare le stringhe corrispondenti in un file
Usa Awk per stampare le stringhe corrispondenti in un file

Utilizzo di Awk con (*) carattere in uno schema

Corrisponderà alle stringhe contenenti localhost, rete locale, linee, capace, come nell'esempio seguente:

# awk '/l*c/{print}' /etc/localhost. 
Usa Awk per abbinare le stringhe nel file
Usa Awk per abbinare le stringhe nel file

Te ne accorgerai anche tu (*) cerca di ottenere la corrispondenza più lunga possibile che riesce a rilevare.

Diamo un'occhiata a un caso che lo dimostra, prendi l'espressione regolare t*t il che significa corrispondere alle stringhe che iniziano con la lettera T e finisci con T nella riga sottostante:

questo è tecmint, dove ottieni i migliori tutorial, come fare, guide, tecmint. 

Otterrai le seguenti possibilità quando usi il modello /t*t/:

questo è t. questo è tecmint. questo è tecmint, dove ottieni t. questo è tecmint, dove ottieni il meglio bene t. questo è tecmint, dove ottieni i migliori tutorial buoni, come t. questo è tecmint, dove ottieni i migliori tutorial, come fare, guide, t. questo è tecmint, dove ottieni i migliori tutorial, come fare, guide, tecmint. 

e (*) in /t*t/ il carattere jolly consente a awk di scegliere l'ultima opzione:

questo è tecmint, dove ottieni i migliori tutorial, come fare, guide, tecmint. 

Utilizzo di Awk con set [ carattere (i) ]

Prendi ad esempio il set [al1], qui awk corrisponderà a tutte le stringhe contenenti carattere un o io o 1 in una riga nel file /etc/hosts.

# awk '/[al1]/{print}' /etc/hosts. 
Use-Awk per stampare i caratteri corrispondenti nel file
Use-Awk per stampare i caratteri corrispondenti nel file

Il prossimo esempio corrisponde a stringhe che iniziano con entrambi K o K seguito da T:

# awk '/[Kk]T/{print}' /etc/hosts 
Usa Awk per stampare la stringa corrispondente nel file
Usa Awk per stampare la stringa corrispondente nel file

Specificare i caratteri in un intervallo

Comprendi i caratteri con awk:

  1. [0-9] significa un solo numero
  2. [a-z] significa abbinare una singola lettera minuscola
  3. [A-Z] significa abbinare una singola lettera maiuscola
  4. [a-zA-Z] significa abbinare una singola lettera
  5. [a-zA-Z 0-9] significa abbinare una singola lettera o numero

Vediamo un esempio qui sotto:

# awk '/[0-9]/{print}' /etc/hosts 
Usa Awk per stampare i numeri corrispondenti nel file
Usa Awk per stampare i numeri corrispondenti nel file

Tutta la riga dal file /etc/hosts contenere almeno un singolo numero [0-9] nell'esempio sopra.

Usa Awk con (^) Meta Carattere

Corrisponde a tutte le linee che iniziano con il modello fornito come nell'esempio seguente:

# awk '/^fe/{print}' /etc/hosts. # awk '/^ff/{print}' /etc/hosts. 
Usa Awk per stampare tutte le linee corrispondenti con il motivo
Usa Awk per stampare tutte le linee corrispondenti con il motivo

Usa Awk con ($) Meta Carattere

Corrisponde a tutte le linee che terminano con lo schema fornito:

# awk '/ab$/{print}' /etc/hosts. # awk '/ost$/{print}' /etc/hosts. # awk '/rs$/{print}' /etc/hosts. 
Usa Awk per stampare una determinata stringa di pattern
Usa Awk per stampare una determinata stringa di pattern

Usa Awk con (\) Escape Character

Ti permette di prendere il personaggio che lo segue come letterale, vale a dire considerarlo così com'è.

Nell'esempio seguente, il primo comando stampa tutta la riga nel file, il secondo comando non stampa nulla perché voglio abbinare una riga che ha $25.00, ma non viene utilizzato alcun carattere di escape.

Il terzo comando è corretto poiché è stato utilizzato un carattere di escape per leggere $ così com'è.

# awk '//{print}' deal.txt. # awk '/$25.00/{print}' deal.txt. # awk '/\$25.00/{print}' deal.txt. 
Usa Awk con il carattere di escape
Usa Awk con il carattere di escape

Riepilogo

Non è tutto con il awk strumento di filtraggio della riga di comando, gli esempi sopra e le operazioni di base di awk. Nelle prossime parti avanzeremo su come utilizzare le caratteristiche complesse di awk. Grazie per la lettura e per eventuali aggiunte o chiarimenti, pubblica un commento nella sezione commenti.

Teachs.ru