如何将下一行的一部分合并到当前行中?

如何将下一行的一部分合并到当前行中?

我有一个结构如下的文件:

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,但话又说回来,我认为使用该工具会非常麻烦。我愿意使用任何命令来完成此任务。我尝试做类似这里答案的事情:将两行合并为一行,从两行中选择选定的单词 但这个问题似乎非常不同,因为这条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

相关内容