vi 텍스트 찾기 바꾸기 관련 명령어 모음
글쓴이: 멀뚱이 작성 일시: 일, 2006/10/01 - 10:25오후
vi 텍스트 찾기와 바꾸기 명령어를 인터넷에서 검색해 보았습니다. 하도 산재되어 있어서 한 군데로 모은 것입니다.
1. 문서 처음부터 마지막까지의 char 를 _char_ 로 치환한다.
:%s/char/_&_/g
:%s/char/_&_/g
2. 현재(커서위치)부터 마지막까지의 char 를 _char_ 로 치환한다.
:.,$s/char/_&_/g
:.,$s/char/_&_/g
3. buf_.*[255], buf_in[255], buf_get[255] 와 같은 문자열을 hello 로 변경한다.
:1,10s/buf_.*\[255\]/hello/g
:1,10s/buf_.*\[255\]/hello/g
4. 숫자로만 이루어진 행 찾기는 다음과 같습니다.
/^\d\+$
^ : 행의 첫부분
\d : 0~9까지의 숫자
+ : 바로 앞의 글자 (여기서는 숫자)가 1개나 1개 이상 있음. (즉 숫자가 최소한 1개 있음)
$ : 행의 마지막 부분
\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
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\}
/[0-9]\{3,5\}
12. 만약 `ab'로 시작하는 소문자로 되어 있는 모든 단어를 삭제하려면 다음과 같이 입력한다.
:%s/ab[a-z]*//g
13. 만약 test라는 파일에 cpu가 들어있는 라인을 모조리 지우고자 한다면 vi mode에서 아래와 같이 사용한다.
:g/cpu/d
# g는 모든 라인에 적용한다라는 의미이고,
# d는 delete를 의미합니다.
# 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
:%s/ \n/\n/g
19. 줄 첫 칸의 띠어쓰기를 없애기
:%s/^ //g
20. 잘못 바꾸기를 했을 때 되돌리려면 그냥 u 키를 누르면 됩니다.
찾기 시 블록 해제하는 방법은?
저같은 경우는 전혀 검색될 문자가 아닌 것들을 타이핑하여 블록을 해제하곤 하는데요
명령어로 존재하는지 궁금하네요.
저도 그냥 /wtfbbq
nohlsearch
:noh를 쓰면 블록이
:set nohlsearch 를
별로 아는 건 없지만
는 전체문서에 적용되는 게 아니고 현재 커서가 있는 줄에만 적용됩니다. 전체 문서에 적용하려면 다음과 같이 해야 합니다.
또는
6번도 마찬가지로 커서가 있는 줄에만 적용되고, 덧붙여서 이 경우에는 다음과 같이 하는게 더 편합니다.
$말고도 여러가지 문자를 쓸 수 있습니다. :나 & 등등. 그리고 u를 눌러 취소했는데(undo), 다시 하고 싶다면 (redo) Ctrl+R을 누르면 됩니다.
--
feel the gravity
줄 뒤 공백문자들 모두 지우기
:%s/[ \n]*//g
:g/^$/d
관련이 있는
이면 어떻게 될까요? (가장 많이 쓰이겠죠)
이렇게 되겠죠.
이 경우는 g 플래그 가 빠진경우는.
마지막 줄의 두번째 etc 는 바뀌지 않겠죠.
% 가 없으면, 커서가 있는 줄만 바뀌겠죠.
처럼 처음의 etc 만 바꾸고 싶을때는 어떻게 하느냐 이것이 안되는 것 같습니다.
물론 줄 번호를 안다면
이런식으로 s 앞에 줄번호를 모르는 경우에는 어떻게 할 방법이 없는 것 같습니다.
로 해당 커서에서 변환하면 되겠지만, 한번에는 안되는 것 같습니다.
.
.
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
:/etc/s/etc/var/라고 해
질문 하나
JimyLinux
그런 건 에디터에서보다 grep 으로 해결하시는 게 편합니다.
이런 내용에 대한 숙지도 필요한것이
====================어흥====================
짖지마시고 말씀을 하세요.
:%g!/a/d g : 다음이
g! : 다음의 패턴이 나타나지 않는 줄에 대해 명령을 실행
:v/a/d %는 보통 생략
9번 HTML 태그 문자가 들어가서 안 보이는 것 같네요.
foldl (flip (:)) [] "universe"
위에 소개된 것들이
vi 중독에서 언제나 벗어나려나..
몰랐던 귀한 정보를 알게됐군요..
고수님들 고맙습니다.
..
이나저나 언제쯤 vi 폐인에서 벗어나려는지..
본문에 오류가
Wikipedian
WonYong
그렇군요. 근데
삽입할때는 \r로 넣어야 하는 이유가 있을까요?
이제 겨우 치환과
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
수정하면 좋을법한 내용
# d는 delete를 의미합니다.
====================어흥====================
짖지마시고 말씀을 하세요.
일련번호 전부 바꾸기
:%s/\(앗싸\)\(좋구나\)\(108계단\)/\2\3\1/g
'1999년 2월 5일' -> '1999-2-5'
'1999년 2월 5일' -> '1999-02-05'
'1949년 12월 25일' -> '1949-12-25'
'1999년 2월 11일' -> '1999-02-11'
'2011년 12월 3일' -> '2011-12-03'
즉, 0000년 00월 00일 식으로 포맷을 통일시킵니다.
:%s/월 \(\d\)일/월 0\1일/g
'1999년 2월 5일' -> '1999년 02월 05일'
'1949년 12월 25일' -> 동일
'1999년 2월 11일' -> '1999년 02월 11일'
'2011년 12월 3일' -> '2011년 12월 03일'
\(\d\)\(\d\)\(\d\)\(\d\)
\(\d\d\d\d\) 로 하나의 그룹으로 묶는게 나을 것 같습니다.
\d\{1,2\} 와 같이 쓰면 숫자가 1~2개인 경우를 검색하기 때문에
포맷을 통일시키는 일이 필수는 아닙니다.
물론 0000-00-00 꼴에서는 두자리로 표현하는게 더 보기 이쁘긴 하지만...
두번째 질문을 한
이런 다양한 방법들이 있다니...
이거.....
좋은 정보 감사합니다.
좋은 팁 감사합니다. 맨뒤의 g나 i같은것 외에도
맨뒤의 g나 i같은것 외에도 다양한 옵션이 있습니다. ( :help s_flags <- p="">->
저는...
를 자주 사용합니당. 그러면 각 "char"에 매칭 되는 단어에서 바꿀지 말지 를 물어보는데
일괄적으로 하는거 보단, 필요한 경우 또는 char 가 다른 단어에 포함되는 단어인 경우 등등
요긴하게 쓰이더라구요
유용한 청보 감사해요
완전 반할뻔... ㅡㅡ;;;;