หากต้องการแก้ไขไฟล์โดยไม่ใช้การโต้ตอบex
( vi
เป็นโหมดภาพex
) คุณสามารถใช้+{command}
หรือ-c {command}
พารามิเตอร์ที่อนุญาตให้คุณรันคำสั่ง vi หลังจากอ่านไฟล์แรก
ex
เป็นบรรณาธิการบรรทัดคำสั่งมาตรฐาน (คล้ายกับed
)
นอกจากนี้ยังมีvipe
(ควรใช้โปรแกรมแก้ไขคำสั่ง Vim) ซึ่งเป็นส่วนหนึ่งของmoreutils
แพ็คเกจและมันจะช่วยให้คุณสามารถเรียกใช้โปรแกรมแก้ไขของคุณตรงกลางของไปป์ไลน์ unix และแก้ไขข้อมูลที่ถูกไพพ์ระหว่างโปรแกรม
ตัวอย่าง
เชลล์อินพุตและเอาต์พุตมาตรฐานโดยใช้ไพพ์สามารถทำได้ด้วยไวยากรณ์เชลล์นี้:
$ ex -sc'%p|q!' <(echo Example)
$ echo Example | ex -sc'%p|q!' /dev/stdin
นี่คือตัวอย่างง่ายๆวิธีการพิมพ์ไฟล์หลังการทดแทน:
$ ex /etc/hosts +%s/127/128/ge -sc'%p|q!'
ตัวอย่างเพิ่มเติมสำหรับการแก้ไขไฟล์แบบแทนที่:
$ ex +'%s/127/128/g' -cswq file
$ ex -sc '%s/olddomain\.com/newdomain.com/g|x' file
$ printf '%s\n' 'g/olddomain\.com/s//newdomain.com/g' w q | ex -s file
$ ex -s "$file" <<< $'g/old/s//new/g\nw\nq'
$ ex -sc 'argdo %s/old/new/ge|x' ./**
$ find . -type f -exec ex -sc '%s/old/new/g|x' {} \;
คุณยังสามารถใช้-s {scriptin}
เพื่อให้คำสั่งถูกโหลดจากไฟล์ตัวอย่าง:
$ printf "%s\n" '%s/foo/test/ge' 'wq' > cmds.vim
$ vim -s cmds.vim -es file
หรือใช้การเปลี่ยนเส้นทาง I / O:
$ vim file < cmds.vim
หากต้องการแก้ไขไฟล์เดียวและบันทึกการเปลี่ยนแปลงเป็นไฟล์อื่นให้ตรวจสอบตัวอย่างต่อไปนี้:
$ ex +%s/127/128/g -sc'wq! new_file' /etc/hosts
$ cat /etc/hosts /etc/fstab | vim - -es '+:%s/foo/test/g' '+:wq! file3'
ตัวอย่างการปฏิบัติเพิ่มเติม
ตัวอย่างสดจริงจากข้อกำหนดRPM :
vim -E -s Makefile <<-EOF
:%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
:%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
:%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
:update
:quit
EOF
แยกแท็ก html :
ex -s +'bufdo!/<div.*id=.the_div_id/norm nvatdggdG"2p' +'bufdo!%p' -cqa! *.html
การลบแท็ก XML :
ex -s +'%s/<[^>].\{-}>//ge' +%p +q! file.txt
การลบแท็กสไตล์ออกจากส่วนหัวและพิมพ์เอาต์พุตแยกวิเคราะห์:
curl -s http://example.com/ | ex -s +'/<style.*/norm nvatd' +%p -cq! /dev/stdin
แยกวิเคราะห์ HTMLด้วยกฎที่ซับซ้อนหลายรายการ:
ex -V1 $PAGE <<-EOF
" Correcting missing protocol, see: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2359 "
%s,'//,'http://,ge
%s,"//,"http://,ge
" Correcting relative paths, see: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2359 "
%s,[^,]\zs'/\ze[^>],'http://www.example.com/,ge
%s,[^,]\zs"/\ze[^>],"http://www.example.com/,ge
" Remove the margin on the left of the main block. "
%s/id="doc_container"/id="doc_container" style="min-width:0px;margin-left : 0px;"/g
%s/<div class="outer_page/<div style="margin: 0px;" class="outer_page/g
" Remove useless html elements. "
/<div.*id="global_header"/norm nvatd
wq " Update changes and quit.
EOF
ตัวอย่างเพิ่มเติม:
ดูสิ่งนี้ด้วย:
file
จาก commandline ที่สองของคุณ