gVim 7.2 반복패턴 순서바꾸기 좀 도와주세요.

garam111의 이미지

탭으로 구분된 텍스트파일의 순서 바꾸기를 할때 저는 주로 아래와 같이 사용하는데요..

aaa bbb ccc

:%s/\(.*\)\t\(.*\)\t\(.*\)\t/\3 \2 \1/g

ccc bbb aaa

위와 같이 변경이 됩니다.

근데 이걸 아래와 같이 처리할 수도 있을 것 같은데 잘 안돼서요.. ㅜ.ㅜ

:%s/\(.*\t\)\{3}/\3 \2 \1/g
요렇게 하면 \1에 ccc만 할당이 되네요.. ㅜ.ㅜ

위의 경우처럼 패턴 반복되는 경우에 좀더 쉽게 처리할 수 있는 방법 좀 알려주세요..

mithrandir의 이미지

$ cat test.txt
aaa bbb ccc
$ ruby -p -i -e '$_ = $_.split.reverse.join(" ") + "\n"' test.txt
$ cat test.txt
ccc bbb aaa

펄이나 루비같은걸 도입해보시길 권합니다.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

lateau의 이미지

> :%s/\(.*\)\t\(.*\)\t\(.*\)\t/\3 \2 \1/g

이 부분을 function으로 구현해두고 쓰셔도 될 것 같은데요.
function, eval 이 두가지만 보셔도 충분히 구현하실 수 있는 내용인 것 같습니다.

> 근데 이걸 아래와 같이 처리할 수도 있을 것 같은데 잘 안돼서요.. ㅜ.ㅜ
> :%s/\(.*\t\)\{3}/\3 \2 \1/g

왜 안되는지는 아래를 참고 하시면 될 것 같습니다.

:help /\1

\1 Matches the same string that was matched by */\1* *E65*
the first sub-expression in \( and \). {not in Vi}
Example: "\([a-z]\).\1" matches "ata", "ehe", "tot", etc.

--
I think to myself...what a emerging world.

--
I think to myself...what a emerging world.