web-dev-qa-db-ja.com

ヘッダーやフッターをsedまたはawkストリームに追加する方法は?

Sedとawkを通過する出力がたくさんあります。

出力の前にSTARTを、回答の後にENDを後ろに付けるにはどうすればよいですか?

たとえば、

All this code
on all these lines
and all these

どうすれば入手できますか:

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

私の試みは:

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

しかし私は得た

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END
14
Michael Durrant

jasonwryan で示されるように、これは機能します。

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

これはsedで行うことができます

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

1iは、1行目の前にi nsertを意味します。 $aは、最終行の後にa ppendを意味します。 $'…'構文はbash固有です。他のシェルでは、次のようにしてこれを行うことができるはずです:

sed -e '1i \Enter
開始 '-e' $ a \Enter
終わり'Enter
11
Scott

すでにsedを使用している場合は、1を使用して最初の行を照合し、$を使用して最後の行を照合できます( Scottの回答 を参照)。すでにawkを使用している場合は、BEGINブロックを使用して最初の行の前にコードを実行し、ENDブロックを使用して最後の行の後にコードを実行することができます( Michael Durrant's答え )。

ヘッダーとフッターを追加するだけの場合は、echocatを使用します。

echo START
cat
echo END

パイプラインで複数のコマンドを実行するには、{ … }を使用して、それらが単一の複合コマンドであることをパーサーに伝えます。

content-generator |
{ echo START; cat; echo END; } |
postprocessor