vim에서 여러 줄 동시에 수정하기
개발 업무를 진행하다보면, 여러 줄로 추출해낸 문자열들을 간단한 데이터 전처리를 통해 일괄적으로 수정해야 되는 경우가 빈번하게 생긴다.
예를 들어,
- 문자열 뒤에 콤마(,)를 붙여야 하는 경우
- 전화번호 사이에 하이픈(-)을 중간에 넣어야 하는 경우
- 원하는 날짜/시각 형식으로 바꿔야 하는 경우
간단한 script를 짜서 일괄적으로 수정할 수도 있지만, 이것 때문에 또 script를 짤려니 여간 귀찮은 게 아니다.
만약 각 행의 문자열들이 동일한 패턴인 경우, 이때 vim을 이용하면 아주 빠르고 간편하게 일괄적으로 수정할 수 있다.
이 글에서는, 개인적으로 자주 사용된다고 생각되는 몇가지 케이스에 대해서 각 케이스별로 한번 정리해보았다.
여러 줄에서 특정 문자 삽입하기
다음과 같은 파일이 있다고 가정하자.
01012345678
01022229999
01038481928
01029472929
01047439204
01029572483
01078739732
01093274739
01043849293
01048294850
이 문자열을 전화번호 형식, XXX-XXXX-XXXX
, 에 맞게 일괄적으로 수정하고자 한다.
- 맨 첫 줄에서 내가 입력할 위치에 커서를 위치시킨 후
Ctrl
+v
를 입력한다.
- 이 커서의 위치가 늘 헷갈리는데, 지금 커서에 위치한 문자가 뒤로 밀려난다고 생각하면 이해하기 쉽다. 위의 예에서는
01012345678
에서1
과5
에 위치시키면 된다.
- 이 커서의 위치가 늘 헷갈리는데, 지금 커서에 위치한 문자가 뒤로 밀려난다고 생각하면 이해하기 쉽다. 위의 예에서는
Shift
+g
를 눌러 맨 아래까지 모두 블록을 씌운다. 그리고 내가 1번에서 위치시킨 커서로 다시 옮겨서, 모든 행에서 내가 입력할 위치의 문자만 블록을 씌운다.
- 사실 행이 몇개 없는 경우는 이렇게까지 안해도 되고, 그냥 화살표 아래 방향(
j
) 으로 커서를 하나씩 직접 옮겨서 블록을 씌워도 된다. 하지만 만약 몇 백, 몇 천개의 행이라면.. 그렇게 할 수 없을 것이다.
- 사실 행이 몇개 없는 경우는 이렇게까지 안해도 되고, 그냥 화살표 아래 방향(
Shift
+i
를 입력한다.- 중간에 삽입할 문자를 입력한다.
- 여기서는
-
- 여기서는
Esc
를 두번 입력한다.
여러 줄에서 특정 위치의 문자 제거하기
010-1234-5678
010-2222-9999
010-3848-1928
010-2947-2929
010-4743-9204
010-2957-2483
010-7873-9732
010-9327-4739
010-4384-9293
010-4829-4850
이번엔 아까와 반대로 하이픈(-)을 모두 제거하여 XXX-XXXX-XXXX
형태로 일괄 수정하고자 한다.
- 맨 첫 줄에서 내가 제거할 위치의 문자에 커서를 위치시킨 후
Ctrl
+v
를 입력한다. Shift
+g
를 눌러 맨 아래까지 모두 블록을 씌운다. 마찬가지로 내가 1번에서 위치시킨 커서로 다시 옮겨서, 모든 행에서 내가 제거할 위치의 문자만 블록을 씌운다.x
를 입력하여 제거한다.
여러 줄에서 맨 끝에 문자 추가하기
01012345678
01022229999
01038481928
01029472929
01047439204
01029572483
01078739732
01093274739
01043849293
01048294850
이번엔 각 문자열의 맨 끝에 콤마(,)를 붙여보자.
- 앞선 방법들과 동일한 방법을 이용하여 각 행의 맨 마지막 문자만 블록을 씌운다.
Shift
+i
를 입력한다.- 화살표 오른쪽(
→
)을 입력하여 맨끝의 문자 오른쪽에 커서를 위치시킨다. - 추가할 문자를 입력한다.
- 여기서는
,
- 여기서는
Esc
를 두번 입력한다.
복합 케이스
마지막으로 이 3가지가 모두 사용된 복합적인 케이스를 보여주며 이 글을 마친다. (설명은 생략)
2024-07-16 21:02:47
2024-07-16 21:02:52
2024-07-16 21:03:57
2024-07-16 21:04:27
2024-07-16 21:05:11
2024-07-16 21:05:44
2024-07-16 21:06:18
2024-07-16 21:07:35
2024-07-16 21:08:04
2024-07-16 21:08:19
이 문자열들을 yyyy-MM-ddTHH:mm:ss+09:00
형식으로 모두 일괄 변경한 예제이다.