Successivo: , Precedente: , Su: Espressioni regolari   [Contenuti][Indice]


3.5 Quanto è lungo il testo individuato?

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).