次の入力があります。
*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.