vi 또는 vim에서 문자열들을 원하는 문자열로 바꿔보자.
환경
- Linux 기반 시스템
- Bash shell(/bin/bash)
- vi 또는 vim
vi(또는 vim) 문자열 치환
기본형
형식
:%s/[원래문자열]/[바꿀문자열]/[옵션]
- 위와 같은 형식으로 다양한 옵션과 함께 사용 가능
- 옵션은 하나만 사용하는게 아니라 혼합해서 같이 사용 가능
- 위 명령어에서
%
를 제외하면 현재 커서가 위치한 줄에서만 치환을 합니다.
옵션
g
: 해당 문자열에 해당하는 문자열들을 모두 치환하는 옵션
ThisThisThis -> testtesttest
:%s/This/test/g
c
: 치환하기 전에 매번 치환할지 확인하는 옵션
ThisThisThis -> testThisThis
~
replace with test (y/n/a/q/l/^E/^Y)?y
:%s/This/test/c
i
: 대소문자를 구분하지 않는 옵션
ThistHisthIs -> testtesttest
:%s/This/test/ig
예제
- 테스트에 사용할 예제 작성
$ vi test.txt
This is test string. This is it!
This is second string.
예제 0 - 현재 줄에서 첫 ‘This’를 ‘tHIS’로 치환
- 다음 아래처럼
%
를 제외하고 하면 됩니다.
tHIS is test string. This is it!
This is second string.
~
~
:s/This/tHIS
예제 1 - 각 줄의 첫 ‘This’를 ‘tHIS’로 치환
- 아무 옵션이 없다면 하나의 줄에서 해당 문자열을 찾으면 치환하고 다음 문자열로 넘어갑니다. 즉, 뒤에 동일하게 맞는 문자열이 있더라도 넘어가게 됩니다.
tHIS is test string. This is it!
tHIS is second string.
~
~
:%s/This/tHIS
예제 2 - 문서 전체의 ‘This’를 ‘tHIS’로 치환
g
옵션을 이용해 전체에서 해당하는 문자열을 모두 치환할 수 있다.
tHIS is test string. tHIS is it!
tHIS is second string.
~
~
:%s/This/tHIS/g
예제 3 - 매번 치환할 때 확인해서 바꾸기
c
옵션을 사용해 매번 확인 가능g
옵션을 함께 이용해 문서 전체에서 바꾸도록 설정- 해당 예제에서는 y->n->y로 입력해서 순서대로 치환
this is test string. This is it!
this is second string.
~
~
replace with test (y/n/a/q/l/^E/^Y)?y
:%s/This/tHIS/cg
예제 4 - 대소문자 구분없이 문서 전체에서 ‘This’를 ‘tHIS’로 치환
i
옵션을 이용해 대소문자를 구분하지 않으면서g
옵션을 이용해 전체에서 해당하는 문자열을 모두 치환
tHIS is test string. tHIS is it!
tHIS is second string.
~
~
:%s/this/tHIS/ig