จะเปลี่ยนวงเล็บซ้ายด้วย sed ได้อย่างไร?


27

ฉันต้องแทนที่(ด้วยอักขระบางตัวในไฟล์ของฉันและฉันไม่สามารถทำได้ \(ถูกนำมาใช้ในการจัดกลุ่มใน sed และเมื่อฉันใช้\\(กับ sed มันได้รับการรักษาเป็นตัวละครที่ไม่ได้เป็นเพียงแค่\( (ดูเหมือนเป็นเรื่องยากสำหรับฉัน


7
คำแนะนำ: ถ้าคุณเพียงต้องการที่จะใช้แทนตัวอักษรสำหรับอื่นใช้tr(anslate) echo 'Hello (world)' | tr '()' '[]'; มันออกHello [world]มา
Lekensteyn

คำตอบ:


45

หากคุณใช้ sed โดยไม่มี -r (การแสดงผลปกติแบบขยาย) จะทำงานตามที่ใช้\(\)แทน()การจัดกลุ่ม:

sed -e 's/(/X/g'

ตัวอย่างเช่น

$ echo "foo (bar) (baz)" | sed -e 's/(/X/g'
foo Xbar) Xbaz)

หากคุณต้องการใช้-rคุณสามารถใส่(ข้างใน[]เช่น

sed -re 's/[(]/X/g'

ตามที่คำพูดของ Lekensteynใช้trอาจเหมาะสมกว่าในขณะที่คุณกำลังแทนที่และคุณไม่ต้องการพลังเต็มที่ของการแสดงออกปกติ


TL; DR: อย่าหนีจากมัน
qwertzguy

ฉันใช้สิ่งนี้เพื่อแทนที่ "split" ของ php ที่เลิกใช้แล้วด้วยฟังก์ชั่น "explode" ทำให้แน่ใจว่า "split" นำหน้าด้วยช่องว่างและตามด้วย "("grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.