Eu tenho um arquivo com uma estrutura assim:
M: a
M: b
Player: c
M: d
Sequencer.Play( SpineAnimation(foo, speaker)@0 )
Player: e
M: f
Sequencer.Play( SpineAnimation(bar, speaker)@0 )
...
Como faço para converter isso em um arquivo como este:
M: a
M: b
Player: c
M foo: d
Player: e
M bar: f
...
Em outras palavras, se a próxima linha tiver Sequencer.Play( SpineAnimation(...
, quero pegar a palavra depois dela e colocá-la antes dos dois pontos na linha atual.
Não tenho certeza de qual seria a melhor ferramenta para isso, estou pensando awk, mas, novamente, acho que será muito complicado com essa ferramenta. Estou aberto a usar qualquer comando para fazer isso. Eu tentei fazer algo como a resposta aqui: Mesclar duas linhas em uma, escolhendo palavras selecionadas de ambas. Mas essa pergunta não parece trivialmente diferente porque a Sequencer.Play
linha nem sempre está lá.
Você pode tentar algo assim, usando sed:
Os comandos
N
...P;D
mantêm um buffer de 2 linhas no espaço do padrão, então os
comando corresponde ao padrão de 2 linhas, capturando as partes entre oM
e a nova linha, e doSpineAnimation(
e do seguinte,
e re-substituindo-os após oM