เครื่องมือ POSIX สำหรับการแก้ไขสคริปต์ของไฟล์ (แทนที่จะพิมพ์เนื้อหาที่แก้ไขจะออกมาตรฐาน) ex
คือ
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
แน่นอนว่าคุณสามารถใช้งานได้sed -i
หากเวอร์ชันของ Sed รองรับเพียงแค่ทราบว่าไม่สามารถพกพาได้หากคุณกำลังเขียนสคริปต์ที่ตั้งใจจะใช้กับระบบประเภทต่างๆ
David Foerster ถามในความคิดเห็น:
มีเหตุผลว่าทำไมคุณใช้printf
และไม่ได้echo
หรือสิ่งที่ต้องการex -c COMMAND
?
คำตอบ: ใช่
สำหรับprintf
เทียบกับecho
มันเป็นคำถามของการพกพา; ดูทำไม printf ถึงดีกว่า echo printf
และก็ยังง่ายต่อการขึ้นบรรทัดใหม่กระจายระหว่างคำสั่งใช้
สำหรับprintf ... | ex
เทียบกับex -c ...
มันเป็นคำถามของการจัดการข้อผิดพลาด สำหรับคำสั่งเฉพาะนี้มันจะไม่สำคัญ แต่โดยทั่วไปแล้วมันจะ; ตัวอย่างเช่นลองวาง
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
ในสคริปต์ ตรงกันข้ามกับสิ่งต่อไปนี้:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
คนแรกจะแขวนและรอการป้อนข้อมูล; ที่สองจะออกเมื่อex
คำสั่งEOF ได้รับดังนั้นสคริปต์จะดำเนินการต่อ มีวิธีแก้ไขปัญหาอื่นเช่นs///e
แต่ไม่ได้ระบุโดย POSIX ฉันชอบที่จะใช้แบบพกพาซึ่งแสดงไว้ด้านบน
สำหรับg
คำสั่งนั้นจะต้องมีการขึ้นบรรทัดใหม่ในตอนท้ายและฉันชอบที่printf
จะใช้เพื่อตัดคำสั่งแทนการฝังบรรทัดใหม่ในเครื่องหมายคำพูดเดี่ยว
awk
ตัวคั่นฟิลด์อย่างชาญฉลาด!