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
과거를 아프게 들여다보지 말라. 그것은 다시 오지 않는다. 현재를 슬기롭게 이용하라. 그것은 그대의 것이다. 힘찬 기상으로 두려워말고 나아가 무지개를 맞으라.