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\+$

^ : 행의 첫부분
\d : 0~9까지의 숫자
+ : 바로 앞의 글자 (여기서는 숫자)가 1개나 1개 이상 있음. (즉 숫자가 최소한 1개 있음)
$ : 행의 마지막 부분

5. 전체 문서에서 add 를 plus로 치환

:s/add/plus/g

6. 현재 편집중인 전체 문서에서 /etc/ 를 /etc/local/ 로 치환

:s/\/etc\//\/etc\/local\//g

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

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

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

:%s/foo/bar/i

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

:%s/\/bar

10. 정렬

123 def ghi
432 ius dkf
089 cdo lks

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

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

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

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

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

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

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

:g/cpu/d

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

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

:g/stat[0-9]/d

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

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

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

:%s/ / /g

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

:%s/\t/ /g

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

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

19. 줄 첫 칸의 띠어쓰기를 없애기

:%s/^ //g

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












1530
points찾기 시 블록 해제하는 방법은?
Submitted by dopesoul on 월, 2006/10/02 - 12:15am.
1
point
search 후엔 꼭 블록이 남더라구요. 이 블록을 해제하는 방법은 없습니까?
저같은 경우는 전혀 검색될 문자가 아닌 것들을 타이핑하여 블록을 해제하곤 하는데요
명령어로 존재하는지 궁금하네요.

»
Login or register to post comments
97
points:noh를 쓰면 블록이
Submitted by 누굴까? on 월, 2006/10/02 - 12:28am.
2
points
:noh를 쓰면 블록이 없어집니다.

»
Login or register to post comments
66
points:set nohlsearch 를
Submitted by karkayan on 월, 2006/10/02 - 9:07am.
2
points
:set nohlsearch 를 하시면 검색할 때 블록이 안생기도록 합니다.

»
Login or register to post comments
634
points별로 아는 건 없지만
Submitted by Palsuet on 월, 2006/10/02 - 12:28pm.
3
points
별로 아는 건 없지만 사족을 조금 달자면, 5번에


:s/add/plus/g

는 전체문서에 적용되는 게 아니고 현재 커서가 있는 줄에만 적용됩니다. 전체 문서에 적용하려면 다음과 같이 해야 합니다.

:%s/add/plus/g

또는

:g/add/s//plus/g

6번도 마찬가지로 커서가 있는 줄에만 적용되고, 덧붙여서 이 경우에는 다음과 같이 하는게 더 편합니다.

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

$말고도 여러가지 문자를 쓸 수 있습니다. :나 & 등등. 그리고 u를 눌러 취소했는데(undo), 다시 하고 싶다면 (redo) Ctrl+R을 누르면 됩니다.
--
feel the gravity

»
Login or register to post comments
10
points줄 뒤 공백문자들 모두 지우기
Submitted by geunhong on 월, 2006/10/02 - 1:04pm.
2
points
- 줄 뒤 공백문자들 모두 지우기
:%s/[ \n]*//g

- 빈 줄 모두 삭제하기
:g/^$/d

»
Login or register to post comments
11581
points관련이 있는
Submitted by 1day1 on 월, 2006/10/02 - 5:22pm.
1
point
치환(변환) 시에 이렇게는 안되는 것 같더라구요.(몰라서 일 수도 있음)

etc 를 var 로 바꾸는 경우

바꿀내용이 이런경우.


/etc/bind/zone
/var/lib/ /var/lib/etc
/etc/bind   /etc/apache


:%s/etc/var/g

이면 어떻게 될까요? (가장 많이 쓰이겠죠)


/var/bind/zone
/var/lib/ /var/lib/var
/var/bind   /var/apache

이렇게 되겠죠.


:%s/etc/var/

이 경우는 g 플래그 가 빠진경우는.


/var/bind/zone
/var/lib/ /var/lib/var
/var/bind   /etc/apache

마지막 줄의 두번째 etc 는 바뀌지 않겠죠.


:s/etc/var/

% 가 없으면, 커서가 있는 줄만 바뀌겠죠.

그런데,


/var/bind/zone
/var/lib/ /var/lib/etc
/etc/bind   /etc/apache

처럼 처음의 etc 만 바꾸고 싶을때는 어떻게 하느냐 이것이 안되는 것 같습니다.
물론 줄 번호를 안다면

:1s/etc/var/

이런식으로 s 앞에 줄번호를 모르는 경우에는 어떻게 할 방법이 없는 것 같습니다.

"/" 로 먼저 찾고


:s/etc/var/

로 해당 커서에서 변환하면 되겠지만, 한번에는 안되는 것 같습니다.

제가 모르고 있는 것인지도 모릅니다. ㅜㅜ

.
.
.

# 관련이 있는 자료
http://www.ranoma.com/board/viewbody.html?code=hard&page=6&number=14697&...
http://byus.net/jsb/read.php?table=study&no=114&page=1

'IT > Unix' 카테고리의 다른 글

IBM TPMC 자료 - 2010-09-09  (0) 2012.01.20
AIX Sar 설정  (0) 2009.04.27
vmstat 필드 설명  (0) 2009.04.21
Network 관련된 11개 파일  (0) 2009.02.26
backup 관련 명령어 요약  (0) 2009.02.25

+ Recent posts