Bagaimana cara menambahkan header dan / atau footer ke aliran sed atau awk?

13

Saya memiliki banyak output melalui sed dan awk.

Bagaimana saya bisa mengawali output dengan MULAI dan mengakhiri jawaban dengan END?

Misalnya, jika saya punya

All this code
on all these lines
and all these

Bagaimana saya bisa mendapatkan:

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

?

Upaya saya adalah:

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

tapi aku mengerti

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END
Michael Durrant
sumber
9
Menggunakan BEGIN dan END ...
jasonwryan

Jawaban:

18

Ini berfungsi, seperti yang ditunjukkan oleh jasonwryan :

awk 'BEGIN{print "START"}; {print}; END{print "END"}'
Michael Durrant
sumber
11

Ini bisa dilakukan seddengan

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

1iberarti saya masukkan sebelum baris 1; $aberarti sebuah ppend setelah baris terakhir. The $'…'sintaks pesta khusus. Di shell lain, Anda harus bisa melakukan ini dengan:

sed -e '1i \ Enter
MULAI' -e '$ a \ Enter
END'Enter
Scott
sumber
8

Jika Anda sudah menggunakan sed, Anda dapat menggunakan 1untuk mencocokkan baris pertama dan $untuk mencocokkan baris terakhir (lihat jawaban Scott ). Jika Anda sudah menggunakan awk, Anda dapat menggunakan BEGINblok untuk menjalankan kode sebelum baris pertama dan satu ENDblok untuk menjalankan kode setelah baris terakhir (lihat jawaban Michael Durrant ).

Jika semua yang perlu Anda lakukan adalah menambahkan header dan footer, cukup gunakan echodan cat.

echo START
cat
echo END

Dalam pipa, untuk menjalankan banyak perintah, gunakan { … }untuk memberi tahu parser bahwa itu adalah satu perintah majemuk tunggal.

content-generator |
{ echo START; cat; echo END; } |
postprocessor
Gilles 'SANGAT berhenti menjadi jahat'
sumber