Stream Editor - Flusso di lavoro
In questo capitolo, esploreremo come funziona esattamente SED. Per diventare un utente SED esperto, è necessario conoscerne i componenti interni. SED segue un semplice flusso di lavoro: lettura, esecuzione e visualizzazione. Il diagramma seguente illustra il flusso di lavoro.
Read: SED legge una riga dal flusso di input (file, pipe o stdin) e la memorizza nel suo buffer interno chiamato pattern buffer.
Execute: Tutti i comandi SED vengono applicati sequenzialmente al buffer del pattern. Per impostazione predefinita, i comandi SED vengono applicati su tutte le linee (globalmente) a meno che non venga specificato l'indirizzamento della linea.
Display: Invia il contenuto (modificato) al flusso di output. Dopo aver inviato i dati, il buffer del pattern sarà vuoto.
Il processo sopra si ripete fino a quando il file è esaurito.
Punti da notare
Il pattern buffer è un'area di archiviazione volatile privata, in memoria, utilizzata dal SED.
Per impostazione predefinita, tutti i comandi SED vengono applicati al buffer del pattern, quindi il file di input rimane invariato. GNU SED fornisce un modo per modificare il file di input sul posto. Lo esploreremo nelle sezioni successive.
C'è un'altra area di memoria chiamata hold bufferche è anche area di archiviazione privata, in memoria, volatile. I dati possono essere memorizzati in un buffer di blocco per un successivo recupero. Alla fine di ogni ciclo, SED rimuove il contenuto del pattern buffer ma il contenuto del buffer hold rimane persistente tra i cicli SED. Tuttavia, i comandi SED non possono essere eseguiti direttamente sul buffer di attesa, quindi SED consente lo spostamento dei dati tra il buffer di blocco e il buffer di pattern.
Inizialmente sia i buffer pattern che quelli di attesa sono vuoti.
Se non vengono forniti file di input, SED accetta l'input dal flusso di input standard (stdin).
Se l'intervallo di indirizzi non è fornito per impostazione predefinita, il SED opera su ciascuna riga.
Esempi
Creiamo un file di testo quote.txt per contenere una citazione del famoso autore Paulo Coelho.
[jerry]$ vi quote.txt
There is only one thing that makes a dream impossible to achieve: the fear of failure.
- Paulo Coelho, The Alchemist
Per comprendere il flusso di lavoro di SED, mostriamo il contenuto del file quote.txt utilizzando SED. Questo esempio simula il filecat comando.
[jerry]$ sed '' quote.txt
Quando il codice precedente viene eseguito, produrrà il seguente risultato.
There is only one thing that makes a dream impossible to achieve: the fear of failure.
Nell'esempio precedente, quote.txt è il nome del file di input e prima c'è una coppia di virgolette singole che implica il comando SED. Demistifichiamo questa operazione.
Il primo SED legge una riga dal file di input quote.txt e la memorizza nel suo pattern buffer. Quindi applica i comandi SED al buffer del pattern. Nel nostro caso non ci sono comandi SED, quindi nessuna operazione viene eseguita sul pattern buffer. Infine cancella e stampa il contenuto del pattern buffer sullo standard output. Non è semplice?
Nell'esempio seguente, SED accetta l'input dal flusso di input standard.
[jerry]$ sed ''
Quando il codice precedente viene eseguito, produrrà il seguente risultato.
There is only one thing that makes a dream impossible to achieve: the fear of failure.
There is only one thing that makes a dream impossible to achieve: the fear of failure.
Qui, la prima riga viene inserita tramite tastiera e la seconda è l'output generato da SED. Per uscire dalla sessione SED, premere ctrl-D (^ D).