Successivo: Operatori di espressioni regolari, Precedente: Uso di regexp, Su: Espressioni regolari [Contenuti][Indice]
Alcuni caratteri non possono essere inclusi letteralmente in costanti
stringa ("pippo"
) o in costanti regexp (/pippo/
).
Vanno invece rappresentati usando sequenze di protezione,
ossia sequenze di caratteri preceduti da una barra inversa (‘\’).
Una sequenza di protezione può essere usata per includere un carattere di
"doppio apice" in una costante stringa. Poiché un semplice doppio apice
termina la stringa, va usato ‘\"’ per richiedere che un doppio apice sia
presente all’interno di una stringa. Per esempio:
$ awk 'BEGIN { print "Egli le disse \"ciao!\"." }' -| Egli le disse "ciao!".
Lo stesso carattere di barra inversa è un altro carattere che non può essere
incluso normalmente; occorre scrivere ‘\\’ per inserire una barra
inversa nella stringa o regexp. Quindi, la stringa costituita dai due
caratteri ‘"’ e ‘\’ deve essere scritta come "\"\\"
.
Altre sequenze di protezione rappresentano caratteri non stampabili come TAB o il ritorno a capo. Anche se è possibile immettere la maggior parte dei caratteri non stampabili direttamente in una costante stringa o regexp, essi possono non essere di facile comprensione.
La seguente lista elenca
tutte le sequenze di protezione usate in awk
e
cosa rappresentano. Se non è detto altrimenti, tutte queste sequenze di
protezione valgono sia per costanti stringa che per costanti regexp:
\\
Barra inversa letterale, ‘\’.
\a
Il carattere “campanello”, Ctrl-g, codice ASCII 7 (BEL). (Spesso genera qualche tipo di segnale sonoro udibile.)
\b
Barra inversa, Ctrl-h, codice ASCII 8 (BS).
\f
Nuova pagina, Ctrl-l, codice ASCII 12 (FF).
\n
A-capo, Ctrl-j, codice ASCII 10 (LF).
\r
Ritorno-a-capo, Ctrl-m, codice ASCII 13 (CR).
\t
Tabulazione orizzontale, Ctrl-i, codice ASCII 9 (HT).
\v
Tabulazione verticale, Ctrl-k, codice ASCII 11 (VT).
\nnn
Il valore ottale nnn, dove nnn può essere da 1 a 3 cifre ottali, tra ‘0’ e ‘7’. Per esempio, il codice per il carattere ASCII ESC (escape) è ‘\033’.
\xhh…
Il valore esadecimale hh, dove hh indica una sequenza di cifre esadecimali (‘0’–‘9’, e ‘A’–‘F’ o ‘a’–‘f’). Dopo ‘\x’ è consentito un massimo di due cifre. Ogni ulteriore cifra esadecimale è considerata come una semplice lettera o numero. (e.c.) (La sequenza di protezione ‘\x’ non è permessa in POSIX awk.)
ATTENZIONE: In ISO C, la sequenza di protezione continua fino a raggiungere il primo carattere che non sia una cifra esadecimale. In passato,
gawk
avrebbe continuato ad aggiungere cifre esadecimali al valore finché non trovava una cifra non esadecimale oppure fino a raggiungere la fine della stringa. Comunque usare più di due cifre esadecimali produceva risultati indefiniti. Dalla versione 4.2, vengono elaborate solo due cifre.
\/
Una barra (dovrebbe essere usata solo per costanti regexp).
Questa sequenza si usa per inserire una costante regexp
che contiene una barra
(come /.*:\/home\/[[:alnum:]]+:.*/
; la notazione ‘[[:alnum:]]’
verrà spiegata più avanti,
in
Usare espressioni tra parentesi quadre).
Poiché una regexp è racchiusa tra
barre, si deve proteggere ogni barra che sia parte dell’espressione, per dire
ad awk
di andare avanti a scandire il resto della regexp.
\"
Un doppio apice (dovrebbe essere usato solo per costanti stringa).
Questa sequenza si usa per inserire in una costante stringa il carattere
doppio apice
(come "Egli le disse \"ciao!\"."
).
Poiché la stringa è racchiusa tra
doppi apici, si deve proteggere ogni doppio apice che sia parte della stringa
per dire ad awk
di andare avanti a elaborare il resto della stringa.
In gawk
, parecchie altre sequenze di due caratteri inizianti con
con una barra inversa hanno un significato speciale nelle regexp.
Operatori regexp propri di gawk
.
In una regexp, una barra inversa che preceda un carattere non presente
nella lista precedente, e non elencato in
Operatori regexp propri di gawk
,
significa che il carattere seguente dovrebbe essere preso letteralmente,
anche se normalmente sarebbe un operatore di regexp. Per esempio,
/a\+b/
individua i tre caratteri ‘a+b’.
Per una completa portabilità, non usare una barra inversa prima di qualsiasi carattere non incluso nella lista precedente, o che non sia un operatore.
Barra inversa prima di un carattere normale
Se si mette una barra inversa in una costante stringa prima di qualcosa che
non sia uno dei caratteri elencati sopra, POSIX
|
Ricapitolando:
awk
legge il programma.
gawk
elabora sia costanti regexp che regexp dinamiche
(vedi la sezione Usare regexp dinamiche),
per gli operatori speciali elencati in
Operatori regexp propri di gawk
.
Sequenze di protezione per metacaratteri
Supponiamo che si usi una protezione ottale o esadecimale
per rappresentare un metacarattere di regexp
(si veda Operatori di espressioni regolari).
Storicamente, tali caratteri erano considerati letteralmente.
(a.b.)
Invece, lo standard POSIX richiede che siano considerati
come metacaratteri veri e propri, e questo è ciò che |
Successivo: Operatori di espressioni regolari, Precedente: Uso di regexp, Su: Espressioni regolari [Contenuti][Indice]