본문 바로가기

linux

[220728] linux vi 찾아 바꾸기 (find and replace)

 

1. vi 찾아바꾸기 

리눅스에서 찾아바꾸기는 :s 명령어를 사용해서 할 수 있다. 

명령모드에서 아래 명령어를 입력한다. 

:[range]s/{pattern}/{string}/[flags] [count]
:[검색범위]s/{찾는 문자열}/{바꿀 문자열}/[옵션] [count]

count는 코맨트를 count만큼 반복한다는 의미같기는 한데, 어떻게 쓰는 건지 잘 모르겠다... 써봐도 감이 안 오더라.

정규식처럼 복잡하지만 익혀두면 파일에서 문자열을 고칠 때 편리하다. 

 

예제를 통해서 사용법을 알아보자 

실습에 사용하려고 의미 없는 문자열 파일을 만들었다. 

의미 없는 문자열 파일

 

:s/t/p

기본적인 포맷이다. 위 명령어는 단순하게 해당 라인에 있는 t 하나를 p로 바꾸는 명령어다. 

sit이 sip으로 바뀌었다.

 

:s/t/p/g

끝에 /g를 붙이면 해당 라인에 있는 모든 t를 p로 바꾼다. 

실행 시 변경이 5번 일어났다고 뜬다.

 

문서의 처음부터 끝까지 탐색을 하고 싶다면, %를 사용해서 전체 영역을 지정해준다. 

:%s/t/p/g

이렇게 하면 문서의 모든 영역에서 모든 t를 p로 바꾼다. 

위 명령어를 실행하면 모든 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 옵션을 쓰면 대소문자 구분을 무시한다. 

실행시 맨 첫줄에 있던 Lorem의 L도 변경이 일어난 걸 볼 수 있다.

 

:%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/