sed は、1 行を次の行の一部に置き換えます。

sed は、1 行を次の行の一部に置き換えます。

次の入力があります。

*123456789
This is a <secret>
Other stuff here.
*987654321
This is a <secret>
Other stuff here.

その中には「ここには別のものがあります」があります。 1行以上があるかもしれませんが、*プレフィックスの付いた数字は可変ですが、常に行全体を占有し、常に一致する固定テキスト文字列「<secret>」の前の行に表示されます。に。

私はこれをシェルスクリプトの1行コマンドにパイプして、"* 123456789"文字列が次の行の<secret>エントリを置き換えて、出力が次のようになるようにしたいと思います。

This is a *123456789
Other stuff here.
This is a *987654321
Other stuff here.

私はsedの複数行の処理を理解するのに苦労しており、他のきちんとしたツールを使用するために開いています。

ベストアンサー1

sed を使用すると、 を使用して次の行を取得し、 を使用してNセクションを並べ替えることができますs。たとえば、

$ sed -E '/^\*[0-9]{1,}$/{N;s/(.*)\n(.*)<secret>/\2\1/}' file
This is a *123456789
Other stuff here.
This is a *987654321
Other stuff here.

おすすめ記事