![다음 행의 일부를 현재 행에 병합하는 방법은 무엇입니까?](https://linux55.com/image/163074/%EB%8B%A4%EC%9D%8C%20%ED%96%89%EC%9D%98%20%EC%9D%BC%EB%B6%80%EB%A5%BC%20%ED%98%84%EC%9E%AC%20%ED%96%89%EC%97%90%20%EB%B3%91%ED%95%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 구조의 파일이 있습니다.
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
개행 문자 사이의 부분과 그 이후의 부분을 캡처합니다.M
SpineAnimation(
,
M