vim에서 여러 줄 동시에 수정하기

개발 업무를 진행하다보면, 여러 줄로 추출해낸 문자열들을 간단한 데이터 전처리를 통해 일괄적으로 수정해야 되는 경우가 빈번하게 생긴다.
예를 들어,

  1. 문자열 뒤에 콤마(,)를 붙여야 하는 경우
  2. 전화번호 사이에 하이픈(-)을 중간에 넣어야 하는 경우
  3. 원하는 날짜/시각 형식으로 바꿔야 하는 경우

간단한 script를 짜서 일괄적으로 수정할 수도 있지만, 이것 때문에 또 script를 짤려니 여간 귀찮은 게 아니다.
만약 각 행의 문자열들이 동일한 패턴인 경우, 이때 vim을 이용하면 아주 빠르고 간편하게 일괄적으로 수정할 수 있다.
이 글에서는, 개인적으로 자주 사용된다고 생각되는 몇가지 케이스에 대해서 각 케이스별로 한번 정리해보았다.


여러 줄에서 특정 문자 삽입하기

다음과 같은 파일이 있다고 가정하자.

01012345678  
01022229999  
01038481928  
01029472929  
01047439204  
01029572483  
01078739732  
01093274739  
01043849293  
01048294850  

이 문자열을 전화번호 형식, XXX-XXXX-XXXX, 에 맞게 일괄적으로 수정하고자 한다.

  1. 맨 첫 줄에서 내가 입력할 위치에 커서를 위치시킨 후 Ctrl + v 를 입력한다.
    • 이 커서의 위치가 늘 헷갈리는데, 지금 커서에 위치한 문자가 뒤로 밀려난다고 생각하면 이해하기 쉽다. 위의 예에서는 01012345678 에서 15에 위치시키면 된다.
  2. Shift + g를 눌러 맨 아래까지 모두 블록을 씌운다. 그리고 내가 1번에서 위치시킨 커서로 다시 옮겨서, 모든 행에서 내가 입력할 위치의 문자만 블록을 씌운다.
    • 사실 행이 몇개 없는 경우는 이렇게까지 안해도 되고, 그냥 화살표 아래 방향(j) 으로 커서를 하나씩 직접 옮겨서 블록을 씌워도 된다. 하지만 만약 몇 백, 몇 천개의 행이라면.. 그렇게 할 수 없을 것이다.
  3. Shift + i 를 입력한다.
  4. 중간에 삽입할 문자를 입력한다.
    • 여기서는 -
  5. 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 형태로 일괄 수정하고자 한다.

  1. 맨 첫 줄에서 내가 제거할 위치의 문자에 커서를 위치시킨 후 Ctrl + v 를 입력한다.
  2. Shift + g를 눌러 맨 아래까지 모두 블록을 씌운다. 마찬가지로 내가 1번에서 위치시킨 커서로 다시 옮겨서, 모든 행에서 내가 제거할 위치의 문자만 블록을 씌운다.
  3. x 를 입력하여 제거한다.

여러 줄에서 맨 끝에 문자 추가하기

01012345678  
01022229999  
01038481928  
01029472929  
01047439204  
01029572483  
01078739732  
01093274739  
01043849293  
01048294850  

이번엔 각 문자열의 맨 끝에 콤마(,)를 붙여보자.

  1. 앞선 방법들과 동일한 방법을 이용하여 각 행의 맨 마지막 문자만 블록을 씌운다.
  2. Shift + i 를 입력한다.
  3. 화살표 오른쪽()을 입력하여 맨끝의 문자 오른쪽에 커서를 위치시킨다.
  4. 추가할 문자를 입력한다.
    • 여기서는 ,
  5. 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 형식으로 모두 일괄 변경한 예제이다.