L'istructions i\ comporta l'inserimento di testo all'inizio.
L'istructions a\ comporta l'aggiunta di testo alla fine.
L'utilizzo dei termini inserimento di testo all'inizio
e aggiunta del testo alla fine
può essere fuorviante,
ed è quindi necessario precisare quali sono gli effetti
di tali istructions.
Nessuna delle due istruction, infatti, modifica il pattern space, nel senso che l'istructions i\ non inserisce all'inzio del pattern space una ulteriore stringa di testo e l'istructions a\ non aggiunge alla fine del pattern space un ulteriore stringa di testo.
Le due istructions agiscono esclusivamente in fase di output.
Questo dettaglio è di fondamentale importanza, perché
le istructions successive ad i\ oppure ad a\, da
eseguire sulla medesima riga nel pattern space, non
saranno condizionate dal testo da esse inserito
o aggiunto
.
La sintassi generale delle istructions è il segunete.
Le righe su cui eseguire le istructions possono essere
selezionate attraverso l'utilizzo di
un address posto prima del simbolo i\ o a\ senza spazi
separatori.
Possono essere utilizzati adress di qualsiasi tipo.
Secondo lo standard POSIX non è ammessa l'esecuzione delle istructions i\ od a\ su un intervallo di righe.
Questa limitazione è superata dallo standard GNU.
In pratica il testo viene inserito o aggiunto, secondo
le regole che vedremo in seguito, per ogni riga
compresa nell'intervallo selezionato.
Il testo da inserire o aggiungere può stare su una o più righe; se sta su più righe, in corrispondenza di ogni backslash \, sarà inviato un newline in fase di output.
L'ultima riga da inserire o aggiungere non termina mai con un backslash. (se il testo da inserire o aggiungere sta solo su una riga, allora quell'unica riga non dovrà terminare con un backslash)
Altro aspetto della sintassi è che dopo il simbolo dell'istructions i od a vi deve essere un backslash ed il testo da inserire deve essere scritto nella riga succesiva.
GNU SED consente anche una sintassi semplificata quando il testo da inserire o aggiungere sta solo su una riga:
Come si può vedere lo standard GNU consente di indicare il testo da inserire o da aggiungere subito dopo il simbolo i od a, senza l'utilizzo del backslash e senza la necessità di scrivere il testo nella riga successiva.
La specificità di tali istructions, rispetto a quelle finora viste, deriva dal fatto che non viene alterato in alcun modo il pattern space corrente, in quanto l'esecuzione delle stesse agisce nella fase di invio all'output del testo esistente nel pattern space.
L'esecuzione dell'istruction i\, o dell'istruction a\,
nell'ambito del ciclo di esecuzione relativo alla riga
caricata nel pattern space, non comporta l'immediato
invio in output del testo da inserire
o aggiungere
:
esso è rimandato ad un momento successivo all'interno
dello stesso ciclo di esecuzione.
Con l'istruction i\, l'invio allo standard output del
testo da inserire
avviene immediatamente prima
dell'invio allo standard output della riga caricata nel
pattern space.
L'invio allo standard output della riga caricata nel pattern space può avvenire per due diverse cause:
Se dopo l'istructions \i è eseguita una istruction per l'invio esplicito allo standard output della riga caricata nel pattern space, prima di tale invio sarà inviato il testo che segue l'istruction \i.
Se, invece, dopo l'esecuzione dell'istruction i\ non ci sono altri script che comportino l'invio esplicito allo standard output della riga nel pattern space, ma è attivo l'invio automatico alla fine del ciclo di esecuzione, prima di questo invio viene inviato il testo collegato all'istruction i\.
Se, in fine, è disattivato anche l'invio automatico, alla fine del ciclo di esecuzione, il testo collegato all'istruction \i viene comunque inviato allo standard output.
Con l'istructions a\, l'invio allo standard output del
testo da aggiungere
, avviene dopo l'ultimo invio allo
standard output della riga caricata nel pattern space.
In pratica se è attivo l'invio automatico allo standard
output della riga nel pattern space, il testo da
aggiungere
viene inviato immediatamente dopo tale
invio automatico.
Se l'invio automatico è disattivato, ma esistono altri
script che implicano l'esecuzione di una istruction di
invio esplicito in output della riga nel pattern space,
l'invio del testo da aggiungere
avviene
immediatamente dopo l'esecuzione dell'ultima istruction
di invio esplicto in output del pattern space.
Se, infine, è disattivato l'invio automatico e non vi
sono script di invio esplicito della riga caricata nel
pattern space, il testo da aggiungere
viene in ogni
caso inviato allo standard output alla fine del ciclo
di esecuzione relativo a quella riga.