Precedente: , Su: Programmi di sed   [Contenuti][Indice]


3.9 Estensioni GNU per le protezioni nelle espressioni regolari

Fino a questo capitolo, abbiamo incontrato solo caratteri di protezione nella forma ‘\^’, che dice a sed di non interpretare l’accento circonflesso come carattere speciale, ma piuttosto di prenderlo letteralmente. Per esempio, ‘\*’ individua un asterisco piuttosto che zero o più barre inverse.

Questo capitolo introduce un altro genere di protezione6—cioè, protezioni che sono applicate a un carattere o a una sequenza di caratteri che ordinariamente sono presi alla lettera, e che sed rimpiazza con un carattere speciale. Ciò fornisce un modo per codificare in maniera visibile caratteri non stampabili contenuti nelle espressioni regolari. Non c’è alcuna restrizione sull’aspetto dei caratteri che non vengono stampati in uno script di sed ma quando uno script è in preparazione nella shell o tramite la scrittura di un testo, è generalmente più facile adoperare una delle seguenti sequenze di protezione piuttosto che il carattere binario corrispondente:

L’elenco di queste sequenze di protezione è:

\a

Genera o corrisponde a un carattere BEL, cioè un “segnale acustico” (ASCII 7).

\f

Genera o corrisponde a un avanzamento di pagina (form feed) (ASCII 12).

\n

Genera o corrisponde a un codice di fine riga (newline) (ASCII 10).

\r

Genera o corrisponde a un ritorno di carrello (carriage return) (ASCII 13).

\t

Genera o corrisponde a una tabulazione orizzontale (ASCII 9).

\v

Genera o corrisponde a una cosiddetta “tabulazione verticale” (ASCII 11).

\cx

Genera o corrisponde a CONTROL-x, dove x è un qualsiasi carattere. L’effetto dettagliato di ‘\cx’ è il seguente: se x è una lettera minuscola, viene convertita in maiuscola. Quindi il bit 6 del carattere (esa 40) viene invertito. Così ‘\cz’ diventa esa 1A, ‘\c{’ diventa esa 3B, e ‘\c;’ diventa esa 7B.

\dxxx

Genera o corrisponde a un carattere ASCII il cui valore decimale è xxx.

\oxxx
\xxx

Genera o corrisponde a un carattere ASCII il cui valore ottale è xxx. La sintassi senza o è attiva nella modalità Perl, mentre quella con la o è attiva nelle modalità POSIX normale ed estesa delle espressioni regolari.

\xxx

Genera o corrisponde a un carattere ASCII il cui valore esadecimale è xx.

\b’ (backspace) è stato omesso a causa del conflitto con l’esistente significato di “word boundary”.

Altre sequenze di protezione corrispondono a una particolare classe di caratteri e sono valide solo nelle espressioni regolari:

\w

Corrisponde a qualsiasi carattere “parola”. Un carattere “parola” è qualunque lettera o cifra o il trattino basso.

\W

Corrisponde a qualsiasi carattere “non-parola”.

\b

Corrisponde a un confine di parola; cioè controlla se il carattere a sinistra è un carattere “parola” e il carattere a destra è un carattere “non-parola”, o viceversa.

\B

Corrisponde a qualsiasi carattere che non sia un confine di parola; ovvero si ha una corrispondenza se il carattere a sinistra e quello a destra sono entrambi caratteri “parola” o entrambi caratteri “non-parola”.

\`

Corrisponde solo all’inizio del pattern space. Questo è diverso da ^ in modalità multiriga.

\'

Corrisponde solo alla fine del pattern space. Questo è diverso da $ in modalità multiriga.

\G

Corrisponde solo all’inizio del pattern space o, se si sta effettuando una sostituzione globale usando il comando s///g con opzione g, alla posizione in cui terminava la corrispondenza precedente. Per esempio il comando ‘s/\Ga/Z/g’ cambierà un’esecuzione iniziale di as in un’esecuzione di Zs


Note a piè di pagina

(6)

Tutte le protezioni qui descritte sono estensioni GNU, con l’eccezione di \n. Nella modalità di base delle espressioni regolari, l’impostazione POSIXLY_CORRECT le disabilita all’interno delle espressioni fra parentesi graffe.


Precedente: , Su: Programmi di sed   [Contenuti][Indice]