본문 바로가기
utils

[Vim] substitution (치환, 교체, replace)

by ds31x 2023. 7. 14.

명령어 형식

substitution 의 기본 명령어 형식은 다음과 같음.

:[range]s/[교체전문자열]/[교체후문자열]/[options]
  • seperator로 / slash를 사용했으나 ,로 바꾸어도 동작함. [교체전문자열]이나 [교체후문자열]등에 slash가 있는 경우 ,를 seprator로 사용하길 권함.
  • [range] 뒤의 s가 substitue 를 의미함.
  • 지정한 범위에서 [교체전문자열]을 찾아 [교체후문자열]로 치환.
  • [options]는 substition 수행시 세부사항을 지정 (ignore case 등)

range 지정

vim에서 range 지정 방식은 다음과 같음. (delete 에서도 같은 방식으로 사용됨.)

[시작부분],[끝부분]

or

[범위지정meta-character]

[시작부분][끝부분]은 다음의 범위지정 meta-character들이 사용됨.

  • % : 문서전체. 혼자서 range를 지정. 가장 많이 사용됨.
  • . : 현재 line.
  • $ : 마지막 line.
  • +n : +3 현재 위치에서 아래로 3개 line.
  • -n : +3 현재 위치에서 위로 3개 line.

options

  • g : global 의 약자로 파일전체에 적용시킨다. 해당 option이 없을 경우, 가장 처음 검색되는 1건에서 substitution이 수행되고 종료함.(yes/no를 묻지않고 치환되니 주의)
  • c : confirm 의 약자로 substitution 이 이루어질 때마다 치환여부를 물어본다.
  • i : ignore case 의 약자로 검색시 case sensitive를 적용하지 않는다.
  • e : substitution 중 발생하는 error를 무시한다.

참고 : carriage return 입력

windows에서 newline은 CR(carriage return)과 LF(line feed)를 사용하는데, CR을 지정하려면 ctrl+q+m (or ctrl+v+m)을 입력해야 한다.

만일 CR을 모두 제거하려고 한다면 [교체전문자열]ctrl+q+m을 입력해주고, [교체후문자열]입력없이 separator를 곧바로 입력한다.

다음을 참고.

:%s/^M//g
  • ^M이라고 보이지만 ctrl+q+m을 입력한 결과가 이렇게 보이는 것임. 그대로 치면 안됨.

vim에서 newline 변경은
command mode에서 :set ff=unix로 처리한 후 저장하면 자동으로 newline이 LF가 된다.
만일 windows의 CRLF로 저장하려면, :set ff=dos를 수행하고 저장하면 된다.


참고자료

참고로, vim에서 substition은 sed 사용법과 동일하다.

sed는 stream editor의 약자로
text file editing을 수행하는 command.

https://reakwon.tistory.com/164

 

[리눅스] sed 명령어를 이용해 원하는 정보를 추출 - 개념과 예제 모음

SED(Stream Editor) SED는 Stream Editor의 약자로 sed라는 명령어로 원본 텍스트 파일을 편집하는 유용한 명령어입니다. 리눅스의 editor라하면 생각나는 에디터가 있지 않나요? vi 편집기가 대표적인데, 여

reakwon.tistory.com

 

carriage return 관련

https://stackoverflow.com/questions/5939142/replacing-carriage-return-m-with-enter

 

Replacing carriage return ^M with Enter

I know how to remove ^M in my files (%s/^M//g), but this one is just one line I'd like to replace ^M with enter... what's the enter character in VIM (to use in commnad-line mode).

stackoverflow.com

vim 사용법 요약본

https://dsaint31.tistory.com/entry/Linux-vi-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC

 

[Linux] vi 사용법 정리

이동관련 기본이동 (Normal mode에서) h : 왼쪽으로 한 글자 이동. j : 한 행 아래로. k : 한 행 위로. l : 오른쪽으로 한 글자 이동. 화면내 이동 H : 현재 화면에서 가장 위의 행으로 M : 현재 화면에서 가

dsaint31.tistory.com