말로 설명하자니 조금 힘든데, 간단히 예를 들면 아래와 같아요
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ..................... 이렇게 한줄로 긴 문자열을
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 .... ....
이렇게 4자리 씩 끊어서 라인별로 쓸려면 어떻게 해야 할까요?
'foo,' 형태의 문자열이 4개 등장할 때마다 newline을 끼워넣는 치환 명령입니다. 결국 ','를 구분자로 쓰면서 4개 필드씩 끊어서 라인을 분리하는 셈이 됩니다.
:%s/\([^,]*,\)\{4}/&\r/g
만약 원본파일이 아래와 같았다면,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
위의 치환명령을 적용하면 아래와 같이 됩니다.
치환문을 좀 수정해서, 'foo, ' 식으로 ',' 뒤에 따라오는 공백까지 고려해서 만들면 아래와 같이 되고요.
:%s/\([^,]*,\s*\)\{4}/&\r/g
같은 원본파일에 적용하면 아래와 같이 됩니다.
만약 매 10글자마다 기계적으로 끊고 싶다면,
:%s/.\{10}/&\r/g
같은 원본파일에 적용하면,
1, 2, 3, 4 , 5, 6, 7, 8, 9, 10, 11, 12
이런식으로 정규식을 조금 궁리하면 어지간한 일은 가능할 것입니다. 아래 페이지에 간단히 정리된 vim 정규식 자료가 있네요.http://gypark.pe.kr/wiki/Vi%EB%A1%9C%EB%AC%B8%EC%9E%90%EC%97%B4%EC%B9%98%ED%99%98%ED%95%98%EA%B8%B0
그리고, vi 정규식 치환만으로 한계를 느낄만한 상황에서는 awk나 python, perl 등을 쓰시면 더 자유롭게 텍스트 자료를 조작할 수 있습니다.
공부를 해도 그 날 지나면 다 까먹고 ㅠㅠ
답변 너무 감사합니다. 열심히 익힐꼐요.
정규식은 ^, $, ., * 등 쉬운것부터 생활속에서 조금씩 쓰시다보면 익숙해집니다. 복잡한 것이 필요해지면 잠깐 문서와 씨름해서 알아내며 살을 붙여나가면 됩니다.
vi에서는 s 명령으로 치환할 때 뿐 아니라, / 명령으로 검색할 때, g 명령으로 대상을 찾을 때 등 여기저기서 정규식을 섞어쓸 수 있으니 평소 vi 쓸때 써 보세요.
그리고, 각종 unix 명령들에서도 여기저기 쓸 데가 많습니다. 조금이라도 알아두면 쓰게 되고, 모르고 있으면 엉뚱한 노가다로 해결하게 됩니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
'foo,' 형태의 문자열이 4개 등장할 때마다
'foo,' 형태의 문자열이 4개 등장할 때마다 newline을 끼워넣는 치환 명령입니다.
결국 ','를 구분자로 쓰면서 4개 필드씩 끊어서 라인을 분리하는 셈이 됩니다.
:%s/\([^,]*,\)\{4}/&\r/g만약 원본파일이 아래와 같았다면,
위의 치환명령을 적용하면 아래와 같이 됩니다.
치환문을 좀 수정해서,
'foo, ' 식으로 ',' 뒤에 따라오는 공백까지 고려해서 만들면 아래와 같이 되고요.
:%s/\([^,]*,\s*\)\{4}/&\r/g같은 원본파일에 적용하면 아래와 같이 됩니다.
만약 매 10글자마다 기계적으로 끊고 싶다면,
:%s/.\{10}/&\r/g같은 원본파일에 적용하면,
이런식으로 정규식을 조금 궁리하면 어지간한 일은 가능할 것입니다.
아래 페이지에 간단히 정리된 vim 정규식 자료가 있네요.
http://gypark.pe.kr/wiki/Vi%EB%A1%9C%EB%AC%B8%EC%9E%90%EC%97%B4%EC%B9%98%ED%99%98%ED%95%98%EA%B8%B0
그리고, vi 정규식 치환만으로 한계를 느낄만한 상황에서는
awk나 python, perl 등을 쓰시면 더 자유롭게 텍스트 자료를 조작할 수 있습니다.
정규식은 매번 볼때마다 신기하내요...
공부를 해도 그 날 지나면 다 까먹고 ㅠㅠ
답변 너무 감사합니다.
열심히 익힐꼐요.
정규식은 ^, $, ., * 등 쉬운것부터 생활속에서
정규식은 ^, $, ., * 등 쉬운것부터 생활속에서 조금씩 쓰시다보면 익숙해집니다.
복잡한 것이 필요해지면 잠깐 문서와 씨름해서 알아내며 살을 붙여나가면 됩니다.
vi에서는 s 명령으로 치환할 때 뿐 아니라, / 명령으로 검색할 때,
g 명령으로 대상을 찾을 때 등 여기저기서 정규식을 섞어쓸 수 있으니
평소 vi 쓸때 써 보세요.
그리고, 각종 unix 명령들에서도 여기저기 쓸 데가 많습니다.
조금이라도 알아두면 쓰게 되고, 모르고 있으면 엉뚱한 노가다로 해결하게 됩니다.
댓글 달기