본문 바로가기

카테고리 없음

vi의 텍스트 찾기, 바꾸기 명령

 

1. 문서 처음부터 마지막까지의 char 를 _char_ 로 치환한다.

:%s/char/_&_/g

 

2. 현재(커서 위치)부터 마지막까지의 char를 _char_ 로 치환한다.

:.,$s/char/_&_/g

 

3. buf_.*[255], buf_in[255], buf_get[255] 와 같은 문자열을 hello 로 변경한다.

:1,10s/buf_.*\[255\]/hello/g

 

4. 숫자로만 이루어진 행 찾기는 다음과 같습니다.

/^\d\+$

 

5. 특수 문자의 의미

^ : 행의 첫 부분

\d : 0~9까지의 숫자

+ : 바로 앞의 글자 (여기서는 숫자)가 1개나 1개 이상 있음 (즉 숫자가 최소한 1개 있음)

$ : 행의 마지막 부분

 

6. 현재 줄에서 add 를 plus로 치환

:s/add/plus/g

 

7. 현재 문서의 모든 add 를 plus로 치환
:%s/add/plus/g
or
:g/add/s//plus/g

 

8. 현재 줄에서 /etc/ 를 /etc/local/ 로 치환

:s$/etc/$/etc/local/$g

$ 말고도 여러 가지 문자를 쓸 수 있습니다.

:나 & 등등

 

9. '앗싸좋구나108계단' 이 '좋구나108계단앗싸' 로 바뀝니다.

:%s/\(앗싸\)\(좋구나\)\(108계단\)/\2\3\1/g

 

10. 대소문자 구분 없이 바꾸려면 i 옵션을 붙입니다. 이것은 ".vimrc" 파일을 고치지 않아도 작동합니다.

:%s/foo/bar/i

 

11. 정확하게 foo에 일치될 때만 바꿉니다. 즉 foo는 바꾸지만, foo 앞뒤로 다른 문자열이 붙어 있는 경우에는 바꾸지 않습니다.

:%s/\/bar

 

12. 정렬

123 def ghi

432 ius dkf

089 cdo lks

 

이걸 숫자를 가운데로, 두 번째는 끝, 세 번째를 처음으로 보내려면

:%s/\([0-9]*\) \([a-z]*\) \([a-z]*\)/\3 \2 \1/g

 

13. 만약 3~5자리로 이루어진 모든 숫자를 검색하고 싶다면 다음과 같이 입력한다.

/[0123456789]\{3,5\} 또는 /[0-9]\{3,5\}

 

14. 만약 `ab'로 시작하는 소문자로 되어 있는 모든 단어를 삭제하려면 다음과 같이 입력한다.

:%s/ab[a-z]*//g

 

15. 만약 test라는 파일에 cpu가 들어있는 라인을 모조리 지우고자 한다면 vi mode에서 아래와 같이 사용한다.

:g/cpu/d

# g는 모든 라인에 적용한다라는 의미이고,# d는 delete를 의미합니다.

 

16. stat0,stat1.....stat9 패턴이 있는 라인을 모조리 지우기

:g/stat[0-9]/d

 

17. 빈 줄 두 줄을 한 줄로 바꾸기

:%s/\n\n/\n/g

 

18. 두 칸을 한 칸으로 줄이기

:%s/ / /g

 

19. 탭을 스페이스 공백으로 바꾸기

:%s/\t/ /g

 

20. 마지막에 한 칸 띠우고 엔터된 것을 바로 엔터한 것으로 고치기

:%s/ $//g 또는 :%s/ \n/\n/g

 

21. 줄 첫 칸의 띄어 쓰기를 없애기

:%s/^ //g

 

22. 잘못 바꾸기를 했을 때 되돌리려면 그냥 u 키를 누르면 됩니다.

그리고 u를 눌러 취소했는데(undo), 다시 하고 싶다면 (redo) Ctrl+R을 누르면 됩니다.

 

23. 찾기 후 블록 해제하는 방법

:noh

검색할 때 블록이 안 생기도록 하려면

:set nohlsearch

 

24. 줄 뒤 공백 문자 모두 지우기

:%s/[ \n]*//g

 

25. 빈 줄 모두 삭제하기

:g/^$/d

 

26. 소문자 a가 포함되지 않은 줄만 모두 삭제

:%g!/a/d

g : 다음이 패턴이 나타나는 줄에 대해 명령을 실행

g! : 다음의 패턴이 나타나지 않는 줄에 대해 명령을 실행

(출처: www.kldp.org)