vi 명령어를 사용해서 정말 귀찮은 일도 간단하게 할 수 있습니다. 오늘은 저번에 말씀 드렸던 검색해서 지우는 명령어와 vi 를 응용하는 방법에 대해 알아보도록 하죠.
단어를 찾아 지우기 위한 명령어는
:g/(찾는단어)/d
입니다. 매우 간단한 명령어지만 찾는 단어가 많을 때는 반복을 여러번 해야한다는 단점이 존재합니다. 한 개의 단어만 삭제할 때는 간단하지만 지워야하는 단어가 10개인 경우 10번의 명령어를 입력하는 것보다 vi 명령어를 이용하면 더 간단하게 할 수 있습니다. 예를 들어 보겠습니다.
다음과 같은 test 파일이 있습니다. 여러개의 과일이 무작위로 써져 있죠. 여기서 우리는 바나나를 제외한 과일들을 전부 삭제하고 싶습니다. 그럴땐 그 전에 배웠던 명령어를 사용해서 바꿀 수 있죠. 하지만 여기서 문제는 과일의 종류가 너무 많다는 점이죠. 한 눈에 봐도 apple, orange, carrot, 등등 :d/(단어)/g 라는 명령어를 여러번 사용해야합니다. 너무 귀찮기도 하고 사람이다 보니 실수를 할 수도 있죠. 이때 vi 명령어를 응용하면 쉽게 할 수 있습니다.
먼저 test 파일을 복사하여 del.exe 라는 파일을 만들어줍시다. 이 del.exe 는 다른 이름이여도 되지만(ex temp) 구분을 쉽게 하기 위해 del.exe 로 만들어주겠습니다. 그 다음 del.exe 를 열어보면 test 와 같은 파일이죠. 여기서 반복되는 값을 없애고 unique 한 값만 남겨주기 위해 :sort u 를 해줍니다.
sort 를 해주면 오른쪽과 같이 반복되는 단어들이 다 삭제되고 5개의 과일만 남게 됩니다. 여기서 test 파일에 남기고 싶은 과일은 banna 이므로 banna 를 삭제해줍니다.
:g/banna/d
명령어를 사용하게 되면 banna 라인만 찾아서 삭제하게 됩니다. 그렇게 하면 test 에서 남기고 싶은 과일인 banna 를 제외한 과일 목록이 남게 됩니다. 우리가 test 창에 입력하고 싶은 명령어 목록은
:g/apple/d
:g/carrot/d
:g/cucumber/d
:g/orange/d
이죠. 이를 위해 매 라인의 앞에
다가 :g/ 를 그리고 뒤에다가는 /d 를 더해주어야합니다.
이 때 :%s/^/:g\/ , :%s/$/\/d 명령어를 통해 앞과 뒤에 원하는 문자를 붙여 줄 수 있습니다. 그 후에는 맨 오른쪽과 같이 결과가 나오며, 맨 끝에 :wq 를 입력해주도록 합니다. 이렇게 하면 del.exe 파일이 완료되었으며 귀찮은 짓을 하는 대신 쉽게 여러 라인을 지울 준비가 완료되었습니다.
자 이제 터미널로 돌아와서 간단한 명령어만 입력해줍니다. 바로
vi (원래파일) < (지우고싶은목록파일)
입니다.
해당 파일을 동작시키면 Vim 명령어가 몇 줄 뜨고서 완료가 됐다는 명령어가 뜹니다. 이제 다시 test 파일을 열어보죠.
의도했던 대로 banna 를 제외한 모든 line 이 삭제된 것을 볼 수 있습니다. 이렇게 vi (목적파일) < (실행파일) 을 이용해, 실행파일에 원하는 명령어 목록을 쭉 입력한 후 실행하면 일일이 명령어를 입력하는 것이 아닌 한번에 명령어 실행이 가능한 것을 알 수 있습니다. 이 때 주의사항이 있는데 vi 명령어를 이용할 때 실수할 경우 .swp 파일이 생깁니다.
아래에서 보면 .test.swp 파일이 생긴 것을 볼 수 있죠. 이 .swp 파일이 있으면 vi 를 이용한 명령어가 먹지 않으므로 꼭 이 파일을 삭제해주고 vi 명령어를 실행해주어야 원하는 동작을 하게 됩니다.
이 방법을 응용하게 되면 비단 단어를 삭제하는 것 뿐만 아니라 추가하는 것도 가능하고 무궁무진하게 이용 가능합니다.
'시뮬레이션 > vi 명령어' 카테고리의 다른 글
vi 명령어) Linux 에서 여러 파일 내 텍스트를 일괄적으로 바꾸는 법 (0) | 2024.09.11 |
---|---|
리눅스 기본 명령어 : 문자열 검색 & 대체하기 (0) | 2024.02.07 |