vim 바꾸기에서 슬래쉬(/) 사용


바꾸기를 할 때 [바꿀 문자열] 이나 [바뀐 문자열]슬래쉬(/)가 포함되면 어떻게 해야할까? 가령, 다음과 같은 파일의 경로를 바꾸기 하는 경우를 생각해보자. 

 

/home/ubuntu/document  →  /root/document


이를 기본 형식 그대로 :[범위]s/[바꿀 문자열]/[바뀐 문자열]/[바꾸기 옵션] 으로 다음과 같이 명령하면 구분자슬래쉬(/)가 너무 많아 오류가 발생할 것이다


:%s//home/ubuntu/document//root/document/g


이런 경우 해결 방법은 두 가지다. 하나는 구분자를 슬래쉬(/) 대신 (.)으로 쓰는 것이고 다른 하나는 슬래쉬(/)가 구분자로 쓰이지 않도록 앞에 역슬래쉬(\)를 붙여 escape 하는 것이다. 즉 다음과 같다.

 

:%s./home/ubuntu/document./root/document.g 슬래쉬(/) 대신 (.)을 구분자로 사용

:%s/\/home\/ubuntu\/document/\/root\/document/g 슬래쉬(/) 앞에 역슬래쉬(\)를 붙이기



vim 바꾸기에서 정규 표현식 이용하기


정규 표현식에 대해서는 앞서 포스팅한 내용을 참조하기 바란다. 


정규 표현식을 이용하면 바꾸기 기능을 훨씬 더 강력하게 사용할 수 있다


가령, 아래의 모든 행의 맨 앞에 http:// 문자열을 첨가하고 싶다


www.daum.net

www.naver.com

www.google.com


정규표현식을 이용하면 간단하게 만들 수 있다


:%s.^.http://.g

캐럿(^)행의 시작을 의미하므로 모든 행이 시작되는 곳에 http:// 문자열이 첨가된다

 

http://www.daum.net

http://www.naver.com

http://www.google.com


아래에는 휴대폰 번호와 이메일이다. 휴대폰 번호 앞에 편의상 010- 문자열을 뺐는데 이를 다시 붙이려고 한다. 어떻게 해야할까?


deliciouslearning@gmail.com

8258-4838

deliciouslearning@hanamil.net

8348-4584

 

이메일도 섞여 있으므로 앞의 사례처럼 모든 행 앞에 일괄적으로 010- 문자열을 첨가할 수는 없다. 


일단, 전화번호에 해당하는 정규표현식을 찾는다. 가운데 하이픈(-)을 중심으로 숫자가 연속되는 열이므로 다음과 같다.


[0-9]\+-[0-9]\+ → (숫자의 연속)(-)(숫자의 연속) 형태의 문자열

\d\+-\d\+ [0-9]는 \d와 동일함

 

위의 정규 표현식을 [바꿀 문자열]에 사용하면 사례에서 나온 모든 휴대폰 번호를 특정해낼 수 있다.

 

그리고 여기에 010- 이라는 문자열을 앞에 붙여야 한다. [바뀐 문자열]에 이를 어떻게 적어야 할까?


[바뀐 문자열]은 번호마다 전부 다르므로 단순한 문자열을 배치하긴 어렵다. [바꿀 문자열]에서 정규 표현식으로 검색한 각각의 내용을 [바뀐 문자열]에서 바로 재사용할 수 있으면 좋다.

 

[바꿀 문자열]에서 찾은 검색결과를 [바뀐 문자열]에서 재사용하고 싶다면 재사용하고 싶은 부분에 해당하는 표현식을 escape 된 소괄호로 감싸는 형식으로 만들어 주어야 한다. 그러면 [바꿀 문자열]에서 escape 된 소괄호로 둘러싸인 부분을 왼쪽에서 오른쪽으로 순서대로 센 것과 [바뀐 문자열]에서 \1~\9가 다음과 같이 각각 대응하게 된다.

 


[바꿀 문자열] \(표현식1\)\(표현식2\).....\(표현식9\)

[바뀐 문자열] →     \1         \2    .....     \9

 

, [바꿀 문자열]에서 escape 된 소괄호로 둘러싸인 부분[바뀐 문자열]에서 9개까지 순서대로 재사용할 수 있는 것이다.


이를 응용하면 앞에서 전화번호 앞에 010- 문자열을 붙이는 것은 다음과 같다.

 

:%s/\(\d\+-\d\+\)/010-\1/g

 

Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


044 vim 문자열 바꾸기에서 슬래쉬(_) 및 정규표현식 사용.apkg


+ Recent posts