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
'Anki로 공부하기 > vi 또는 vim 익히기' 카테고리의 다른 글
046 vim 여러 파일을 열고 버퍼 확인하기 (0) | 2018.07.05 |
---|---|
045 vim 특정 패턴을 조건으로 문자열 바꾸기 (0) | 2018.07.04 |
043 vim 문자열 바꾸기 기본 형식 및 범위와 옵션 (0) | 2018.06.30 |
042 vim 범위 지정 명령하기 (0) | 2018.06.28 |
041 vim의 정규표현식(14) 확장 정규 표현식 4 (0) | 2018.06.27 |