Server & OS

vi editor 문자열 바꾸기(replace)

페이지 정보

본문

기본 치환 방법


:%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에 포커스를 맞춰주기 때문에, 개발자가 직접 눈으로 보고 선택적으로 변경을 할 수 있기에 더 안전하다.


2701F54F59512F621D너 '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' 라는 개행문자를 '' 공백문자로 전역치환 하는 방법이다.


관련자료

등록된 댓글이 없습니다.
Today's proverb
제 아이를 남들에게 비교하지 않기 (오숙희)