문서편집 (1)

💻 Programming/Linux

vi 에서 문자열 치환하기

오랜만에 포스팅을 합니다.


뭐, 그냥 종종 사용하는 건데 맨날 까먹어서 계속 구글링하게 만드는 vi에서 문자열 치환하기에 대한 내용입니다.


*nix 환경에서 작업을 하게되면 설정 파일을 수정할 일이 많이 생깁니다.


이때 파일 다운로드 경로나, 이런 저런 경로들을 config 파일 안에 설정해놓고 사용하기도 하는데, 이때 경로 개수가 많고 앞부분의 경로는 동일한 것들이 많을 수 있습니다.


예를들어, /aaa/bbb/myapp/conf/config.properties 파일에 다음과 같은 내용들이 있을 수 있죠.


.

.

myapp.root=/aaa/bbb/myapp

myapp.log=/aaa/bbb/myapp/log

myapp.modules=/aaa/bbb/myapp/modules

.

.


저런식으로 경로가 저장이 되어있는데, 앞부분의 절대경로를 다른 경로로 변경해주고 싶을 때가 있습니다. 파일 사이즈가 작고 4~5개 정도면 하나하나 수정을 해줘도 되겠지만, 파일 사이즈가 크고 경로 설정하는 부분이 여기저기 흩어져 있으면 일일이 찾아서 수정하기가 쉽지 않습니다.


이럴 때 사용하라고 vi에서는 강력한 치환 기능을 제공하고있습니다.


%s/치환하려는문자열정규식/결과문자열정규식/옵션


vi로 문서를 열어놓은 상태에서 :을 입력하여 명령어를 입력할 수 있도록 한 뒤 위 형식에 맞게 문자열 및 옵션을 입력해주면 파일 전체에서 특정 문자열을 찾아서 결과문자열로 변경할 수 있습니다.


위 예를들어 /aaa/bbb/myapp을 /ccc/ddd/app 으로 변경을 하고 싶다면


%s/\/aaa\/bbb\/myapp/\/ccc\/ddd\/app/g


라고 입력해주면 전체 파일의 내용을 검색하여 /aaa/bbb/myapp 문자열을 찾은 뒤 /ccc/ddd/app 으로 치환해줍니다.


명령어를 살펴보면 다음과 같습니다.


%s : 문서 전체

g : 한줄에 동일 패턴이 여러개 존재하는 경우 모두 적용

i : 대소문자 구분 안함




이상으로 간만의 포스팅을 마칩니다~