vi editor 문자열 바꾸기(replace)
컨텐츠 정보
- 2,534 조회
- 0 추천
- 목록
본문
기본 치환 방법
:%s/foo/bar
모든 foo라는 문자열을 'bar'로 한꺼번에 치환한다.
기본 틀은 아래와 같다.
:%s/[원본단어]/[바꿀단어]
기본 틀에 옵션을 주면, 좀더 활용이 편리한 경우가 있다.
:%s/[원본단어]/[바꿀단어]/[옵션]
아래에서 소개하는 방법들은 그 옵션별로, 어떤 동작을 하는지를 설명한다.
대소문자 구분없이 치환 방법
:%s/foo/bar/i
foo라는 문자열 뿐만 아니라, Foo, FOo, FOO, fOo, fOO, foO, FoO 등과 같은 문자열을 'bar' 라는 문자열로 한꺼번에 치환한다.
전역 치환 방법
:%s/foo/bar/g
vi의 기본적인 치환 방법을 실행하게 되면, 하나의 줄에서 가장 첫번째로 등장하는 단어만 치환한다.
예를 들어 'foofoofoofoofoofoofoofoo' 라는 문장이 있다고 가정하자.
:%s/foo/bar 를 실행하면 결과는 'barfoofoofoofoofoofoofoo' 와 같이 된다.
만약 원하는 것이, 'barbarbarbarbarbarbarbar' 와 같이 모든 'foo'가 전부 'bar'로 바뀌는 것이었다면, 지금 소개하는 '전역 치환 방법'을 적용하면 된다.
interactive모드로(바꿀까요? 물어보도록) 치환 방법
:%s/foo/bar/c
위 명령에서 마지막의 'c'는 foo를 bar로 바꾸어도 좋은지 물어보도록 하는 옵션이다. vi가 바꾸려고 하는 foo에 포커스를 맞춰주기 때문에, 개발자가 직접 눈으로 보고 선택적으로 변경을 할 수 있기에 더 안전하다.
너 'bar'로 바꿀거니?
이와 같이 바꿀 단어를 만나게 되면, 사용자에게 물어본다.
y: 현재 focus 된 'foo'를 'bar'로 바꾸고 다음 'foo'로 건너뛰어 focus를 맞춘다.
n: 현재 focus 된 'foo'를 'bar'로 바꾸지 않고 다음 'foo'로 건너뛰어 focus를 맞춘다.
a: 더이상 묻지 않고, 모든 'foo'를 'bar'로 바꾼다.
q: 바꾸는 것을 그만 둔다.
l : 현재 focus된 'foo'를 'bar'로 바꾸고, 더이상 바꾸기를 하지 않고 그만둔다.
옵션을 혼용한 치환 방법
:%s/foo/bar/gic
만약, 전역 치환방법과 interactive모드로의 치환, 대소문자 무시한 치환을 모두 적용하고 싶다면?
지금 소개하는 방법과 같이 옵션을 동시에 사용할 수 있다.
응용1. 경로 치환 방법
만약 어떤 소스코드에 '/etc/file.txt' 라는게 있다고 해보자.
그런데 이걸 '/opt/usr/data/file.txt' 라는 문자열로 바꿔야 한다면?
:%s/\/etc\/file.txt/\/opt\/user\/data\/file.txt/g
슬래쉬 '/' 문자는 특수 문자이다.
이와 같이 특수 문자앞에 필수로 붙여야하는 '\' 를 활용하면 된다.
응용2. 개행문자(줄바꿈 문자)를 모두 없애기
파일의 모든 줄바꿈 문자를 없애야 하는 상황이라면?
아래와 같은 방법을 적용할 수 있다.
:%s/\n//g
'\n' 라는 개행문자를 '' 공백문자로 전역치환 하는 방법이다.
관련자료
-
링크