형식))
:%s/원본문자/치환문자/g
:1,$s/원본문자/치환문자/g
:1,10s/원본문자/치환문자/g
특정 파일 안에 있는 문자열 치환방법
find *.html
-type f -exec sed -i 's/211.111.222.108/encoding.osstem.com/g' {} \;
find *.html
-type f -exec sed -i 's/211.111.222.109/stream.osstem.com/g' {} \;
%는 문서 전체
1,10 는 1번째 줄에서 10번째 줄
ctrl v 를 눌러 가상 블럭을 설정하여 자기가 원하는 라인 부터 아래로 주욱 블럭을 설정
그리고 : 를 누르면
:'<,'> 와 같이 출력
:'<,'>s/원본문자/치환문자/g 와 같이 추가로 명령 타이핑
위에서 v 로 가상 블럭을 잡은 부분의 범위에만 치환
예))
:1,$s/^M//g
:1,$s/[Control]+v+m을 누른다.//g
:1,$s/"//g
:1,$s/row/--row/g
Vi(m) 사용시 ^M 없애기
vi(m)을 사용하다보면 윈도우즈에서 작업한 텍스트 파일에 ^M 문자가 붙는 경우를 종종 봅니다.
현재 vim에서는 도스 문서로 문서를 읽게 되면 이 문자가 붙지 않기도 하지만
종종 이 문자 때문에 문서 보기가 상당히 귀찮아 보일 때가 있습니다.
특히, SQL 백업 파일을 볼 때 이 문자가 붙기도 하는데 특정한 내용을 볼 때
이런 문자가 붙은 것을 보기는 상당히 힘들죠.
(sun의 파일을 aix에서 받을 때에도 이런 문제가 발생한다고 합니다)
이 문자는 ^M은 ^+M이 아니라 Control+v+m 입니다. 따라서, 다음에 이 문자를 없앨 때도
이렇게 타이핑을 하도록 합니다.
생각보다 많은 방법들이 있을 수 있겠군요.
1. vi(m)이 열린 상태
1.1 문자 치환 명령 이용
다음과 같이 문자 치환 명령으로 이 문자를 없애도록 합니다.
:1,$s/^M//g
물론 이것의 입력은 다음과 같이 하도록 합니다.
:1,$s/[Control]+v+m을 누른다.//g
1.2 파일포맷 변경
vim 5.0 이상에서는 다음과 같이 명령을 내리도록 합니다
:set fileformat=unix
혹은
:set ff=unix
그리고, 저장하고 종료합니다.
:wq
이와 반대로 끝에 ^M붙이려면 다음과 같이 합니다.
:set fileformat=dos
이전버전에서는 다음과 같이 합니다.
:set textmode
2. 프롬프트 상에서
2.1 dos2unix 이용
dos2unix와 unix2dos를 이용하여 변환할 수 있습니다.
다음과 같이 하면 ^M 문자가 없어집니다.
$ dos2unix [문서명](여러 파일의 경우 *.확장자)
그리고 다음과 같이 하면 ^M 문자가 생기죠.
$ unix2dos [문서명]
2.2 cat과 tr을 이용한 방법
다음과 같이 하면 해당 파일의 ^M 문자가 없어집니다.
$ cat dos-file | tr -d ^M > unix-file
2.3 perl 스크립트
다음과 같이 하면 여러파일을 한번에 바꾸게 됩니다.
# perl -i -pe 's/\015//g' *.html
3. 다른 에디터의 사용
pico 라는 에디터 아실겁니다. 기능은 별로 없지만 빠르고 간편하죠.
vi나 emacs에서 ^M으로 잡히는 것이 pico에서는 안 잡히는데,
파일을 pico로 열어서 다시 이 문서를 저장합니다.
그리고 vi나 emacs로 읽으면 ^M이 모두 없어진 것을 알 수 있습니다.
4. man 페이지의 ^M, ^H 문자
man 페이지를 일반 화일로 바꾸면 ^M, ^H 등이 생기는데(예, 한컴리눅스 ^H)
다음과 같이 하면 이 문자를 없애고 볼 수 있습니다.
다음은 ls의 예입니다.
4.1 ps 또는 pdf로 변환하기
man -t 변경 시킬 화일 > 변경후 화일명.ps
man -t 변경 시킬 화일 > 변경후 화일명.pdf
예)
man -t ls > ls.ps 또는 ls.pdf로 보시면 됩니다.
4.2 텍스로 변환하기
man 변환시킬화일 | col -b> 변환후 화일명.txt
예)
man ls | col -b > ls.txt
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 키를 누르면 됩니다.