Come aggiungere un'intestazione e / o piè di pagina a un flusso sed o awk?


13

Ho un sacco di output che passa attraverso sed e awk.

Come posso aggiungere il prefisso all'uscita con START e suffisso la risposta con END?

Ad esempio, se ho

All this code
on all these lines
and all these

Come potrei ottenere:

START
All this code
on all these lines
and all these
END

?

Il mio tentativo è stato:

awk '{print "START";print;print "END"}'

ma ho ottenuto

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END

Risposte:



11

Questo può essere fatto sedcon

sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

1imezzi i NSERT prima linea 1; $aindica una ppend dopo l'ultima riga. La $'…'sintassi è specifica per bash. In altre shell, dovresti essere in grado di farlo con:

sed -e '1i \ Enter
START' -e '$ a \ Enter
END'Enter

8

Se stai già usando sed, puoi usare 1per abbinare la prima riga e $per abbinare l'ultima riga (vedi la risposta di Scott ). Se stai già usando awk, puoi usare un BEGINblocco per eseguire il codice prima della prima riga e un ENDblocco per eseguire il codice dopo l'ultima riga (vedi la risposta di Michael Durrant ).

Se tutto ciò che devi fare è aggiungere un'intestazione e un piè di pagina, basta usare echo e cat.

echo START
cat
echo END

In una pipeline, per eseguire più comandi, utilizzare { … }per dire al parser che sono un singolo comando composto.

content-generator |
{ echo START; cat; echo END; } |
postprocessor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.