เครื่องมือ 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ตัวคั่นฟิลด์อย่างชาญฉลาด!