Jak dodać nagłówek i / lub stopkę do strumienia sed lub awk?

13

Mam sporo wyników przechodzących przez sed i awk.

Jak mogę poprzedzić wyjście słowem START, a sufiksu odpowiedź - END?

Na przykład, jeśli mam

All this code
on all these lines
and all these

Jak mogę uzyskać:

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

?

Moja próba była:

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

ale mam

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END
Michael Durrant
źródło
9
Używanie BEGIN i END ...
jasonwryan

Odpowiedzi:

18

Działa to, jak wskazał jasonwryan :

awk 'BEGIN{print "START"}; {print}; END{print "END"}'
Michael Durrant
źródło
11

Można to zrobić za sedpomocą

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

1iśrodki i nsert przed linią 1; $aOznacza to ppend po ostatnim wierszu. $'…'Składnia jest bash specyficzne. W innych powłokach powinieneś być w stanie to zrobić za pomocą:

sed -e „1i \ Enter
START” -e „$ a \ Enter
END”Enter
Scott
źródło
8

Jeśli już używasz sed, możesz użyć, 1aby dopasować pierwszą linię i $dopasować do ostatniej linii (patrz odpowiedź Scotta ). Jeśli już używasz awk, możesz użyć BEGINbloku do uruchomienia kodu przed pierwszą linią i ENDbloku do uruchomienia kodu po ostatniej linii (patrz odpowiedź Michaela Durranta ).

Jeśli wszystko, co musisz zrobić, to dodać nagłówek i stopkę, po prostu użyj echoi cat.

echo START
cat
echo END

W potoku, aby uruchomić wiele poleceń, użyj, { … }aby powiedzieć parserowi, że jest to jedno polecenie złożone.

content-generator |
{ echo START; cat; echo END; } |
postprocessor
Gilles „SO- przestań być zły”
źródło