Successivo: Espressioni regolari calcolate, Precedente: Espressioni tra parentesi quadre, Su: Espressioni regolari [Contenuti][Indice]
Si consideri il caso seguente:
echo aaaabcd | awk '{ sub(/a+/, "<A>"); print }'
Questo esempio usa la funzione sub()
per modificare il record in input.
(sub()
sostituisce la prima ricorrenza in ogni testo individuato dal
primo argomento con la stringa fornita come secondo argomento;
vedi la sezione Funzioni di manipolazione di stringhe.) Qui, la regexp /a+/
richiede
“uno o più caratteri ‘a’,” e il testo da sostituire è ‘<A>’.
L’input contiene quattro caratteri ‘a’.
Le espressioni regolari awk
(e POSIX) individuano sempre
la sequenza più lunga, partendo da sinistra, di caratteri in input che
corrispondono. Quindi, tutti e quattro i caratteri ‘a’ sono
rimpiazzati con ‘<A>’ in questo esempio:
$ echo aaaabcd | awk '{ sub(/a+/, "<A>"); print }' -| <A>bcd
Per semplici test corrisponde/non corrisponde, la cosa ha poca importanza.
Ma se si sta controllando un testo o si fanno sostituzioni usando le funzioni
match()
, sub()
, gsub()
e gensub()
,
è invece molto importante.
Tenere in conto questo principio è importante anche quando si suddividono
record e campi usando delle regexp (vedi la sezione Controllare come i dati sono suddivisi in record,
e anche vedi la sezione Specificare come vengono separati i campi).