Capitolo 7 Manipolazione del testo

Sommario
7.1 Sintassi delle espressioni regolari
7.2 Comandi di manipolazione del testo

7.1 Sintassi delle espressioni regolari

Alcuni programmi di manipolazione del testo come grep(1), egrep(1), sed(1), awk(1) e vi(1) consentono di ricercare uno schema (pattern) piuttosto che una stringa fissa. Questi schemi testuali sono conosciuti come espressioni regolari. Si può formare un'espressione regolare combinando caratteri normali con caratteri speciali, anche conosciuti come meta-caratteri, secondo le successive regole. Con queste espressioni regolari si può confrontare uno schema su dati testuali. Le espressioni regolari si presentano in tre diverse forme:

Ancoraggi legano lo schema a una posizione sulla linea
Serie di caratteri indicano un carattere in una singola posizione
Modificatori specificano quante volte ripetere l'espressione precedente

Segue la sintassi delle espressioni regolari. Alcuni programmi accettano tutte queste sintassi, altri ne accettano solo alcune:

. indica un singolo carattere eccetto quello di newline
* indica zero o più istanze del singolo carattere (o meta-carattere) che lo precede
[abc] indica un carattere tra quelli racchiusi
[a-d] indica un carattere tra quelli compresi nel range
[^exp] indica un carattere tra quelli non inclusi nell'espressione
^abc l'espressione regolare deve iniziare all'inizio della linea (Ancoraggio)
abc$ l'espressione regolare deve finire alla fine della linea (Ancoraggio)
\ tratta il carattere successivo letteralmente. Viene normalmente usato per mantenere inalterato il significato di un carattere speciale come . e *.
\{n,m\} confronta l'espressione regolare precedente un numero minimo n di volte e un numero massimo m di volte (n e m possono assumere valori tra 0 e 255). I simboli \{ e \} dovrebbero essere intesi come singoli operatori. In questo caso il simbolo \ che precede le parentesi non è il carattere di escape, ma assume un nuovo significato.
\<abc\> confronta l'espressione regolare racchiusa trattandola come una singola parola. I limiti della parola sono definiti iniziando con un newline o qualche altra cosa, eccetto una lettera, una cifra o un underscore ( _ ), e finendo con la stessa cosa o con un carattere di fine linea. Ancora, i simboli \< e \> dovrebbero essere intesi come singoli operatori.
\(abc\) salva lo schema racchiuso in un buffer. Possono essere salvati per ogni linea fino a nove schemi. È possibile riferirsi a questi schemi tramite la combinazione di caratteri \n. Ancora una volta i simboli \( e \) dovrebbero essere intesi come singoli operatori.
\n dove n varia tra 1 e 9. Confronta l'n-sima espressione precedentemente salvata per la linea corrente. Le espressioni sono numerate partendo da sinistra. Il simbolo \n dovrebbe essere inteso come un singolo operatore.
& mostra lo schema di ricerca precedente (usato al posto della stringa)

Ci sono alcuni meta-caratteri usati solamente da awk(1) e egrep(1). Questi sono:

+ confronta una o più delle espressioni precedenti (a questo simbolo)
? confronta zero o alcune delle espressioni precedenti (a questo simbolo)
| separatore. Confronta sia l'espressione precedente (a questo simbolo) sia quella seguente
( ) raggruppa le espressioni regolari all'interno delle parentesi e applica una serie di confronti

Alcuni esempi di espressioni regolari comuni sono:

espressione regolare indica
cat la stringa cat
.at alcune occorrenze di un carattere precedente ad at, come cat, rat, mat, bat, fat, hat
xy*z alcune occorrenze di un x, seguite da zero o più y e seguite da una z.
^cat cat all'inizio della linea
cat$ cat alla fine della linea
\* alcune occorrenze di un asterisco
[cC]at cat o Cat
[^a-zA-Z] alcune occorrenze di caratteri non alfabetici
[0-9]$ alcune linee che finiscono con un numero
[A-Z][A-Z]* una o più lettere maiuscole
[A-Z]* zero o alcune lettere maiuscole (in altre parole, qualcosa)

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <[email protected]>.
Per domande su questa documentazione, invia una e-mail a <[email protected]>.