Successivo: Altre Risorse, Precedente: Esempi, Su: Top [Contenuti][Indice]
sed
Per chi vuol scrivere script di sed
portabili,
è bene sapere che alcune implementazioni sono note per
limitare la dimensione delle righe (per il pattern space e per l’hold space)
a non più di 4000 byte.
Lo standard POSIX specifica che le implementazioni conformi di
sed
devono supportare dimensioni di riga di almeno 8192 byte.
GNU sed
non ha limiti precostituiti per la dimensione delle righe;
con l’unico limite della memoria (virtuale) allocata da malloc()
,
si possono inserire o formare righe lunghe a piacere.
Comunque, per trattare sotto-espressioni e ripetizioni indefinite è usata la ricorsione. Questo vuol dire che gli spazi di stack possono limitare la dimensione del buffer che può essere elaborato per alcune espressioni.
Ci sono alcune limitazioni di dimensione nella lunghezza delle espressioni regolari da utilizzare, ma si spera che in pratica non siano quasi mai rilevanti. La lunghezza massima di un’espressione compilata è 65539 (sic) byte. Ogni valore di una specifica di ripetizione dev’essere inferiore a 65536. La massima profondità di nidificazione di tutte le sotto-espressioni tra parentesi, sia quelle che trovano qualcosa, che quelle che non lo fanno,10, nonché alle dichiarazioni e ad altri tipi di sotto-espressione è 200.
Inoltre, GNU sed
riconosce la sintassi POSIX
[.ch.]
e [=ch=]
dove ch è un “insieme di elementi”, ma questi
non sono supportati, e viene data una segnalazione di errore
se li si incontra.
Qui sotto si possono vedere alcune distinzioni fra le autentiche espressioni regolari in stile Perl e quelle riconosciute da -R.
s
.
Perl imposta le proprie variabili numeriche da ognuna di queste espressioni
regolari che sono state trovate prima che la dichiarazione smetta di
trovare qualcosa (in questo modo essendo soddisfatta), ma solo se la
dichiarazione negativa rivolta in avanti contiene solo una ramificazione.
sed
non supporta costrutti ‘(?{code})’
e ‘(?p{code})’. Comunque, c’è qualche supporto in via sperimentale
per espressioni regolari ricorsive, usando il metodo non-Perl ‘(?R)’.
sed
.
sed
questo non succede.
Comunque, sia in Perl che in GNU sed
la ricerca di ‘/^(a)?a/’
nella stringa ‘a’ lascia $1 non impostato.
La distinzione ha senso se riferita a espressioni regolari in stile Perl.
‘$2’ sarebbe invece ‘\2’ in GNU sed
.
Successivo: Altre Risorse, Precedente: Esempi, Su: Top [Contenuti][Indice]