ถ้าฉันเรียกใช้รหัสนี้ใน bash:
echo dog dog dos | sed -r 's:dog:log:'
ให้ผลลัพธ์:
log dog dos
ฉันจะทำให้มันแทนที่เหตุการณ์ทั้งหมดของสุนัขได้อย่างไร
ถ้าฉันเรียกใช้รหัสนี้ใน bash:
echo dog dog dos | sed -r 's:dog:log:'
ให้ผลลัพธ์:
log dog dos
ฉันจะทำให้มันแทนที่เหตุการณ์ทั้งหมดของสุนัขได้อย่างไร
คำตอบ:
คุณควรเพิ่มgตัวปรับแต่งเพื่อให้ sed ทำการแทนที่เนื้อหาทั่วโลกของบัฟเฟอร์รูปแบบ:
echo dog dog dos | sed -e 's:dog:log:g'
สำหรับเอกสารที่ยอดเยี่ยมใน sed ตรวจสอบhttp://www.grymoire.com/Unix/Sed.html ธงสากลนี้มีคำอธิบายที่นี่: http://www.grymoire.com/Unix/Sed.html#uh-6
ดูเอกสารอย่างเป็นทางการGNU sedได้ที่http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'ไม่ได้ทำในระดับโลก ถ้าคุณเปลี่ยนมันsed -E -e 's,foo,bar,g'ใช้งานได้
คุณต้องใส่gท้ายมันย่อมาจาก "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sedบน Ubuntu -rตัวเลือกหมายถึง "ใช้นิพจน์ทั่วไปแบบขยาย" ดังนั้นคำสั่งที่กำหนดจึงทำงานได้ดีแม้ว่าจะไม่ต้องการคุณสมบัติของนิพจน์ทั่วไปที่ขยายออกไปในการทำงาน
gแฟล็กสำหรับการเปลี่ยนตัวทั่วโลกคุณไม่จำเป็นต้องมี-rตัวเลือกที่นี่เช่นกัน