짜증나는 반복적인 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 콘솔을 복잡하게 만들기 때문에 cls
Vim을 실행한 후에 정리해야 할 수도 있습니다.
# 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'
빈 줄을 제거해야 합니다