Bash 스크립트 VIM 명령

Bash 스크립트 VIM 명령

짜증나는 반복적인 VIM 명령 세트를 적용해야 하는 파일이 몇 개 있습니다. 이는 파일이 필요한 프로세스에서 지원하지 않는 일부 줄을 제거하기 위한 기본 VIM 명령입니다.

postgresdb.out이라는 파일이 있다고 가정해 보겠습니다.

이 파일에서 나는

vim ./postgresdb.out

그런 다음 VIM 내에서

:%s/old/new/g

그런 다음

:g/deletethis/d

이어서

:%s/\n\n//g

그럼 파일을 저장하고 하루를 시작해 보세요

항상 다시 입력하는 대신 이 프로세스를 수행하기 위해 bash 스크립트를 작성할 수 있는지 궁금합니다.

답변1

대안

Vim의 특별한 기능이 꼭 필요한 것이 아니라면, Vim을 사용하는 것이 더 좋습니다.비대화형 도구예를 들어 sed, awk또는 Perl/Python/Ruby/당신이 가장 좋아하는 스크립팅 언어가 여기에 있습니다.

즉, Vim을 비대화식으로 사용할 수 있습니다:

자동 배치 모드

매우 간단한 텍스트 처리의 경우(예: 향상된 "sed" 또는 "awk"와 같은 Vim을 사용하거나 명령의 향상된 정규식을 활용하는 경우 :substitute) 다음을 사용하세요.사전 모드.

REM Windows
call vim -N -u NONE -n -i NONE -es -S "commands.ex" "filespec"

참고: 자동 배치 모드( :help -s-ex)는 Windows 콘솔을 복잡하게 만들기 때문에 clsVim을 실행한 후에 정리해야 할 수도 있습니다.

# Unix
vim -T dumb --noplugin -n -i NONE -es -S "commands.ex" "filespec"

"commands.ex"참고: 파일이 존재하지 않으면 Vim은 입력을 기다리며 정지합니다. 파일이 존재하는지 미리 확인하는 것이 좋습니다. 또는 Vim은 stdin에서 명령을 읽을 수 있습니다. stdin에서 읽은 텍스트로 새 버퍼를 채울 수도 있고, 인수를 사용하는 경우 stderr에서 명령을 읽을 수도 있습니다 -.

완전 자동화

여러 창과 Vim의 진정한 자동화를 포함하는 고급 처리를 위해(사용자와 상호 작용하거나 Vim을 실행 중인 상태로 두고 사용자가 인계받도록 할 수 있음) 다음을 사용하세요.

vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"

사용된 매개변수를 요약하면 다음과 같습니다.

-T dumb           Avoids errors in case the terminal detection goes wrong.
-N -u NONE        Do not load vimrc and plugins, alternatively:
--noplugin        Do not load plugins.
-n                No swapfile.
-i NONE           Ignore the |viminfo| file (to avoid disturbing the
                user's settings).
-es               Ex mode + silent batch mode -s-ex
                Attention: Must be given in that order!
-S ...            Source script.
-c 'set nomore'   Suppress the more-prompt when the screen is filled
                with messages or output to avoid blocking.

답변2

자동 편집을 사용해야 합니다 sed(1)( 참조 man sed).

당신이 찾고 있는 추천은

 sed -i -e s/old/new/g -e /deletethis/d -e '/^$/d' postgresdb.out

나는 당신의 기대가 무엇인지 잘 모르겠습니다 :%s/\n\n//d.

어디

  • -i제자리에서 편집하는 것을 의미합니다(보통 sed는 버전을 표준 출력으로 출력합니다).
  • -e...수정/삭제
  • -e '/^$/d'빈 줄을 제거해야 합니다

관련 정보