시뮬레이션/vi 명령어

vi 명령어 응용 : exe 파일 만들어서 여러 단어 검색해서 지우기

코라자비 2024. 2. 16. 18:57

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 명령어를 실행해주어야 원하는 동작을 하게 됩니다.

 

이 방법을 응용하게 되면 비단 단어를 삭제하는 것 뿐만 아니라 추가하는 것도 가능하고 무궁무진하게 이용 가능합니다.

반응형