다음 행의 일부를 현재 행에 병합하는 방법은 무엇입니까?

다음 행의 일부를 현재 행에 병합하는 방법은 무엇입니까?

다음과 같은 구조의 파일이 있습니다.

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

관련 정보