리눅스 vim(vi) 편집기 문자열 치환 명령어 정리
linux vim(vi) 편집기 문자열 치환 명령어 정리
linux vim(및 vi) 편집기에서는 문자열 치환이 필요한 경우 다음과 같은 형식의 명령어를 사용하여 문자열을 치환할 수 있는데요.
아래 내용을 통해 해당 명령어를 사용하는 여러 옵션 및 예시들을 살펴보겠습니다.
(문자열 치환은 편집기의 ex 모드에서 진행됩니다.)
1. 기본 치환 명령어
#기본 형식
: s/검색할문자열/바꿀문자열/
#현재 커서 라인에서 첫 번째로 발견되는 'hello' 문자열을 'world'로 치환
: s/hello/world/
기본적인 치환 명령어는 's/검색할문자열/바꿀문자열/' 형식이며, 해당 명령어는 현재 커서가 위치한 라인에서 첫 번째로 일치하는 '검색할문자열'을 '바꿀문자열'으로 치환합니다.
2. 현재 라인에 대해 일치하는 모든 문자열을 치환
#기본 형식
: s/검색할문자열/바꿀문자열/g
#현재 커서 라인에서 발견되는 모든 'hello' 문자열을 'world'로 치환
: s/hello/world/g
두 번째로 기본 치환 명령어 마지막에 'g(global)' 플래그를 사용하게 되면 현재 라인 전체에 대한 문자열 치환 기능을 실행할 수 있습니다.
3. 특정 범위의 라인(또는 모든 라인)에 대해 일치하는 모든 문자열 치환
#L1 ~ L2 라인까지 문자열 치환하는 형식
: L1,L2s/검색할문자열/바꿀문자열/g
#현재 커서 위치 기준으로 -N ~ +M 라인까지 치환하는 형식
: -N,+Ms/검색할문자열/바꿀문자열/g
#전체 라인에 대해 치환하는 형식
: %s/검색할문자열/바꿀문자열/g
현재 라인뿐만 아니라 특정 범위의 라인에 대해 일치하는 모든 문자열을 치환하고 싶은 경우 첫 번째 예시와 같이 s 앞에 '시작라인,종료라인'을 명시하여 치환 범위를 특정 라인으로 지정할 수 있으며, 두 번째 예시와 같이 현재 커서가 위치한 행 +, - 라인 수를 통해 치환 범위를 지정할 수도 있습니다.
또한 파일 전체 범위에 대해 문자열 치환을 적용하고 싶은 경우 s 앞에 파일 전체를 의미하는 '%' 특수문자를 입력하여 파일 전체에 대한 문자열 치환을 수행할 수 있습니다.
4. 치환 확인 모드
#기본 형식
: s/검색할문자열/바꿀문자열/gc
#현재 커서 라인에서 발견되는 모든 'hello' 문자열에 대해 'world'로 치환할지 확인
: s/hello/world/gc
#다음과 같은 confirm이 나타납니다.
replace with world (y/n/a/q/l/^E/^Y)?
기본 치환 명령어 다음 'c(confirm)' 플래그를 추가하게 되면 각각의 일치하는 문자열을 치환하기 전에 사용자가 확인할 수 있는 프롬프트가 나타납니다.
앞서 살펴본 'g' 플래그 등, 다른 플래그와 함께 사용될 수 있습니다.
y: 현재 발견된 'hello'를 'world'로 바꾸고 다음 'hello'를 찾습니다.
n: 현재 발견된 'hello'를 'world'로 바꾸지 않고 다음 'hello'를 찾습니다.
a: 더 이상 confirm을 발생하지 않고 발견되는 모든 'hello'를 'world'로 바꿉니다.
q: 문자열 치환을 종료합니다.
l: 현재 발견된 'hello'를 'world'로 바꾸고 문자열 치환을 종료합니다.
(두 번째 예시를 기준으로 confirm의 각 선택지에 대해 설명하자면 다음과 같습니다.)
5. 대소문자 무시
#기본 형식
: s/검색할문자열/바꿀문자열/gi
#전체 라인에 대해 대소문자 구분 없이 발견되는 'hello' 문자열을 모두 'world'로 치환
: %s/hello/world/gi
기본 치환 명령어 다음 'i(ignore cate)' 플래그를 추가하게 되면 검색할 문자열에 대해 대소문자를 무시하고 검색하게 됩니다.
6. 정규표현식을 사용한 문자열 치환
#전체 라인에 대해 'o'로 끝나는 문자열을 'ooooo'로 치환
: %s/o$/ooooo/g
#전체 라인에 대해 각 단어 사이의 공백을 콤마(,)로 치환
:%s/\s\+/,/g
기본 치환 명령어에서 '검색할문자열' 부분에는 정규표현식을 사용할 수 있습니다.
정규표현식을 사용한 간단한 예시를 몇 가지만 살펴보면 다음과 같으며, vi 편집기와 vim 편집기에서 지원하는 정규표현식은 조금 다를 수 있습니다.
(vim 편집기에서 더 많은 정규표현식을 지원합니다.)
7. '\' 역슬래시를 사용하는 경우
#'http://'를 'https://'로 치환
: %s/http:\/\//https:\/\//g
#역슬래시를 사용하여 전체 라인에 대해 '하나', '둘'이라는 문자열에 대한 스왑
: %s/\(하나\)\(둘\)/\2\1/g
vim(및 vi) 편집기에서 '\' 역슬래시는 정규표현식에서 특수문자를 이스케이프 하거나 특별한 의미를 가진 문자로 해석하기 위해 사용되며, 다음 예시와 같이 활용될 수 있습니다.