ถ้าฉันเรียกใช้รหัสนี้ใน 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
ตัวเลือกที่นี่เช่นกัน