vi에서 긴 문자열에 특정 조건에 따라 개행을 하게끔 하려면 어떻게 할까요?

ksjudo의 이미지

말로 설명하자니 조금 힘든데,
간단히 예를 들면 아래와 같아요

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자리 씩 끊어서 라인별로 쓸려면 어떻게 해야 할까요?

chanik의 이미지

'foo,' 형태의 문자열이 4개 등장할 때마다 newline을 끼워넣는 치환 명령입니다.
결국 ','를 구분자로 쓰면서 4개 필드씩 끊어서 라인을 분리하는 셈이 됩니다.

:%s/\([^,]*,\)\{4}/&\r/g

만약 원본파일이 아래와 같았다면,

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

위의 치환명령을 적용하면 아래와 같이 됩니다.

1, 2, 3, 4,
 5, 6, 7, 8,
 9, 10, 11, 12

치환문을 좀 수정해서,
'foo, ' 식으로 ',' 뒤에 따라오는 공백까지 고려해서 만들면 아래와 같이 되고요.

:%s/\([^,]*,\s*\)\{4}/&\r/g

같은 원본파일에 적용하면 아래와 같이 됩니다.

1, 2, 3, 4, 
5, 6, 7, 8, 
9, 10, 11, 12

만약 매 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 등을 쓰시면 더 자유롭게 텍스트 자료를 조작할 수 있습니다.

ksjudo의 이미지

공부를 해도 그 날 지나면 다 까먹고 ㅠㅠ

답변 너무 감사합니다.
열심히 익힐꼐요.

chanik의 이미지

정규식은 ^, $, ., * 등 쉬운것부터 생활속에서 조금씩 쓰시다보면 익숙해집니다.
복잡한 것이 필요해지면 잠깐 문서와 씨름해서 알아내며 살을 붙여나가면 됩니다.

vi에서는 s 명령으로 치환할 때 뿐 아니라, / 명령으로 검색할 때,
g 명령으로 대상을 찾을 때 등 여기저기서 정규식을 섞어쓸 수 있으니
평소 vi 쓸때 써 보세요.

그리고, 각종 unix 명령들에서도 여기저기 쓸 데가 많습니다.
조금이라도 알아두면 쓰게 되고, 모르고 있으면 엉뚱한 노가다로 해결하게 됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.