![10 migliori software di gestione delle partizioni per Windows 10 nel 2021](/f/2dddede120b3ae3c6d3c16b4cfd40e45.png?width=100&height=100)
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
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.
Le espressioni regolari sono costituite da:
(.)
corrisponde a qualsiasi singolo carattere eccetto una nuova riga.(*)
corrisponde a zero o più esistenze del carattere immediato che lo precede.[ 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.^
corrisponde all'inizio di una riga in un file.$
corrisponde alla fine della riga in un file.\
è 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.
Negli esempi seguenti, ci concentreremo sui metacaratteri che abbiamo discusso sopra sotto le caratteristiche di awk.
L'esempio sotto stampa tutte le righe nel file /etc/hosts poiché non viene fornito alcun modello.
# awk '//{print}'/etc/hosts.
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
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.
Corrisponderà alle stringhe contenenti localhost, rete locale, linee, capace, come nell'esempio seguente:
# awk '/l*c/{print}' /etc/localhost.
Te ne accorgerai anche tu (*)
cerca di ottenere la corrispondenza più lunga possibile che può 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.
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.
Il prossimo esempio corrisponde a stringhe che iniziano con entrambi K
o K
seguito da T
:
# awk '/[Kk]T/{print}' /etc/hosts
Comprendi i caratteri con awk:
[0-9]
significa un solo numero[a-z]
significa abbinare una singola lettera minuscola[A-Z]
significa abbinare una singola lettera maiuscola[a-zA-Z]
significa abbinare una singola lettera[a-zA-Z 0-9]
significa abbinare una singola lettera o numeroVediamo un esempio qui sotto:
# awk '/[0-9]/{print}' /etc/hosts
Tutta la riga dal file /etc/hosts contenere almeno un singolo numero [0-9]
nell'esempio sopra.
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.
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.
Ti permette di prendere il carattere 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.
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.