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

Odpowiedzi:



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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.