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


13

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

回答:



11

これはで行うことができるsed

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

1i手段私はライン1の前にnsert。最後の行の後に追加$aすることを意味ます。$'…'構文はbashの固有のものです。他のシェルでは、次を使用してこれを行うことができます。

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

8

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

ヘッダーとフッターを追加するだけでよい場合はecho、とを使用しcatます。

echo START
cat
echo END

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

content-generator |
{ echo START; cat; echo END; } |
postprocessor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.