1. vi 찾아바꾸기
리눅스에서 찾아바꾸기는 :s 명령어를 사용해서 할 수 있다.
명령모드에서 아래 명령어를 입력한다.
:[range]s/{pattern}/{string}/[flags] [count]
:[검색범위]s/{찾는 문자열}/{바꿀 문자열}/[옵션] [count]
count는 코맨트를 count만큼 반복한다는 의미같기는 한데, 어떻게 쓰는 건지 잘 모르겠다... 써봐도 감이 안 오더라.
정규식처럼 복잡하지만 익혀두면 파일에서 문자열을 고칠 때 편리하다.
예제를 통해서 사용법을 알아보자
실습에 사용하려고 의미 없는 문자열 파일을 만들었다.
:s/t/p
기본적인 포맷이다. 위 명령어는 단순하게 해당 라인에 있는 t 하나를 p로 바꾸는 명령어다.
:s/t/p/g
끝에 /g를 붙이면 해당 라인에 있는 모든 t를 p로 바꾼다.
문서의 처음부터 끝까지 탐색을 하고 싶다면, %를 사용해서 전체 영역을 지정해준다.
:%s/t/p/g
이렇게 하면 문서의 모든 영역에서 모든 t를 p로 바꾼다.
전체 영역 대신 특정 라인을 지정할 수도 있다.
:1,3s/t/p/g
이렇게 하면 1,3라인 사이에 있는 t만 p로 변경된다.
찾은 문자열을 다른 문자열로 대체하지 않고 삭제하려면 //를 사용한다.
:%s/t//g
정규식 패턴도 사용할 수 있다.
:%s/[a-zA-z]b/ ! /g
'/'대신 알파벳이 아닌 어떠한 1바이트 문자를 구분자로 써도 상관없다고 한다. 찾는 문자열에 '/'가 포함되어 있을 경우 대체해서 사용할 수 있다.
:%s-t-p
위와 같이 써도 똑같이 t가 p로 변경된다.
:s/t/p/gc
c 옵션을 쓰면 vi가 찾은 문자열을 바꾸기 전에 확인을 받는다.
명령어를 실행하면 키워드를 바꿀지 물어보면서 (y/n/a/q/l/^E/^Y) 중 하나를 입력하라고 한다.
y : 변경함
n : 변경하지 않음
a : 더 이상 묻지 않고 모든 항목을 변경
q : 탐색을 종료
l : 변경한 뒤 종료
^E(ctrl + E) : 스크롤을 위로 올림
^Y(ctrl + Y) : 스크롤을 아래로 내림
요령껏 명령어를 사용해서 탐색하면 된다.
:%s/l/t/gi
i 옵션을 쓰면 대소문자 구분을 무시한다.
:%s/\<et\>/ ! /g
:s 명령어는 토큰을 검색해서 찾아바꾸는데, 패턴의 앞뒤에 \< \>를 붙이면 단어 단위 검색을 할 수 있다. 위 예제의 경우 실행하면 amet의 et는 바뀌지 않지만, 단어인 et는 변경이 일어나게 된다.
참고자료
https://linuxize.com/post/vim-find-replace/
Find and Replace in Vim / Vi
Find and replace is a powerful feature of Vim, which allows you to make changes to your text quickly.
linuxize.com
위 사이트에서 많이 배웠다. 예제도 여기에 있는 걸 거의 사용해서 지금 내가 쓴 글도 이 사이트를 번역한 거나 마찬가지인 것 같다.
https://www.cyberciti.biz/faq/vi-vim-editor-search-and-replace-howto/
http://aboutmadlife.blogspot.com/2014/12/linux-vi.html
https://qualitestgroup.com/insights/technical-hub/how-to-search-and-replace-in-vi/
'linux' 카테고리의 다른 글
[220825] vi 블록 선택 / 복사&붙여넣기 (0) | 2022.08.25 |
---|---|
[220730] linux 여러 파일에서 문자열 찾아 바꾸기 (0) | 2022.07.30 |
[211013] linux-window 원격 서버 간 파일 복사하기(scp 사용) (0) | 2021.10.13 |