2011-05-09 6 views
5

파일이 너무 많아서 1 ~ 55 줄을 삭제하고 25 ~ 35 줄에 주석 (예 : //)을 추가 한 다음 새 파일에 저장합니다.여러 파일의 자동 편집

어떻게하면 bash 쉘에서 vim으로 자동으로 수행합니까?

+1

파일을 열지 않고 '편집'하려면'bash' 쉘에서'sed'를 사용해야합니다. – pavium

+2

'ex'는'sed'보다 더 좋을 것이고,'ex'는 같은 명령어 세트'vi'를 사용합니다. –

답변

3

vi의 조상 인 유닉스 라인 편집기 ed으로 우아하게이를 수행 할 수 있습니다.

fix_file() { 
    ed $1 <<< EOF 
    1,55d 
    25,35s_.*_// &_ 
    wq 
    EOF 
} 

이제, 당신이 필요로하는 각 파일 F에 대해, 단지 fix_file F을 실행합니다. ed 또는 sed의 사용이 일반적인 관행 1, 가끔 빔을 사용하는 것이 훨씬 더 편리하다는 사실에도 불구하고

13

. 2 사실, 대신 "맹목적"는 ed -like 스크립트를 작성이 경우, 대화 형

vim -w log.vim file1.txt 

로 파일 중 하나의 원하는 편집을 수행 한 후 나머지를 반복하는 것이 더 쉽습니다 파일의.

gg55dd:25,35s/^/\/\//
:w %_new 
:q! 

주, 즉 새 이름으로 파일을 저장하기 위해 당신이 직접 입력하지해야하지만 오히려 % 대체를 사용 : 귀하의 경우 log.vim 파일에서

for f in file*.txt; do vim -s log.vim "$f"; done 

가능성과 유사한 내용이있을 것이다 . 또 다른 방법은 파일 을 미리 복제 한 다음 해당 위치에서 편집 (각각을 :w으로 저장)하는 것입니다.

이 접근법의 장점은 모든 변경 사항을 대화 형으로 확보하여 원하는 결과를 얻고 있다는 것입니다.


1 물론 당신은 ed -like 방식으로 동일한 작업을 수행 할 수 있습니다.

for f in file*.txt; do vim -c '1,55d|25,35s/^/\/\/ /|w! '"${f}_new"'|q!' $f 

2

그것이 분명히 빔 솔루션을 선호 하는 질문에 명시된 있다고 언급 할 필요가 없을 것입니다.

+0

GUI 버전 (gvim)을 사용하면 안됩니다. [내 질문] (http://stackoverflow.com/questions/3981535/using-the-w-option-of-vim) 및 관련 버그를 참조하십시오. GUI를 사용하여 스크립트 아웃풋을 편집해야합니다. – Benoit

+0

@Benoit 경고를 보내 주셔서 감사합니다! 나는 GVim을 사용하지 않았기 때문에, 내가 알고있는 동안 그 행동을 눈치 채지 못할 것 같습니다. –