次の行の一部を現在の行にマージする方法は?

次の行の一部を現在の行にマージする方法は?

次の構造のファイルがあります。

M: a
M: b
Player: c
M: d
Sequencer.Play( SpineAnimation(foo, speaker)@0 )
Player: e
M: f
Sequencer.Play( SpineAnimation(bar, speaker)@0 )
...

次のファイルにどのように変換できますか?

M: a
M: b
Player: c
M foo: d
Player: e
M bar: f
...

つまり、次の行にコロンがある場合は、Sequencer.Play( SpineAnimation(...現在の行のコロンの前にその後に単語を入れたいと思います。

どのツールが一番良いのかわからないので、awkを考えていますが、また使用するのは非常に面倒です。これを行うには、どのコマンドでも使用する意向があります。私はここへの答えに似たものを試しました。2行を1つにマージし、2行から選択した単語を選択します。Sequencer.Playしかし、この線が常に存在するわけではないので、この問題は非常に異なるようです。

ベストアンサー1

sed を使用して、次のことを試すことができます。

$ sed -e 'N;s/M:\(.*\)\nSequencer.Play( SpineAnimation(\([^,]*\).*/M \2:\1/' -e 'P;D' file
M: a
M: b
Player: c
M foo: d
Player: e
M bar: f

N...コマンドはP;Dパターンスペースに2行のバッファを保持し、コマンドは2行のパターンと一致してs改行文字の間の部分とそれ以降の部分をキャプチャします。MSpineAnimation(,M

おすすめ記事