2013년 10월 7일 월요일

[VI/VIM] 찾기 & 바꾸기 정리

vi에서 찾기 및 바꾸기를 정리합니다.
워낙 사용방법이 무궁무진하여, 개략적으로 정리했습니다.
KLDP의 스레드를 참조하였습니다. (https://kldp.org/node/74138)

1. 사용법
vi 화면에서 command mode ( ':' 입력 ) 으로 전환 후, 입력합니다.

2. 일반적인 형식
:[범위]s/[찾을문자열]/[바꿀문자열]/[옵션]
- 간단예시
 :%s/abc/efg/g : 문서 전체에서 abc를 efg로 치환



- 범위
  • 일반 형식 : "[시작라인],[끝라인]" , "[특수문자]"
  • 예제 
    • 1,25 : 1행부터 25행까지
      • :1,25s/a/b/g : 1행부터 25행까지 a를 b로 모두 치환
    • % : 문서 처음부터 마지막까지
      • :%s/a/c/g : 문서 전체에서 a를 c로 모두 치환
    • .,200 : 현재 커서 행부터 200행까지
      • :.,200s/a/d/g : 현재 커서 행부터 200행까지 a를 d로 모두 치환
    • .,$ : 현재 커서 행부터 문서 마지막 까지
      • :.,$s/a/e/g : 현재 커서 행부터 문서 마지막까지 a를 e로 모두 치환
    •  : [무입력] 현재 행만
      • :s/a/g/g : 현재 행만 a를 g로 모두 치환

- 찾을문자열, 바꿀문자열
  • 일반 형식 : [문자열], [특수문자][문자열]....
  • 예제
    • & : 특수문자. 찾을문자열을 대입한다.
      • char/_&_ : 'char'를 '_char_'로 치환
    • a/b : 일반문자열. a를 b로 치환한다.
    • [정규표현식] : 문자열에는 정규표현식이 가능하며, 이를 통해 다양한 응용이 가능하다.
    • \(ab\)\(cd\)\(ef\)/\3\1\2 : 각 문자열의 순서를 정렬한다. 예시의 경우 결과는 'efabcd'가 된다.
- 옵션
  • g : grep. 해당 조건에 만족하는 모든 행에 수행한다. g! 인 경우, 해당 조건에 만족하는 행을 제외한 모든 행에 수행한다.
  • c : choose(?). 바꿀 문자열마다 확인 및 취소를 선택할 수 있다.
  • ":help s_flags" 로 옵션 조회 가능.


정규표현식을 사용하면, 정말 무궁무진한 수식이 다 나오지만, 쓰이는 빈도는 그리 많지 않을 것 같습니다. 포스트 앞부분의 링크를 따라가 보시면, 정말 많은 표현이 가능하다는 것을 보실 수 있습니다.