Bagaimana cara mengganti kurung kiri dengan sed?


27

Saya harus mengganti (dengan beberapa karakter di file saya, dan saya tidak bisa melakukannya. \(digunakan untuk pengelompokan dalam sed dan ketika saya digunakan \\(dengan sed, itu diperlakukan sebagai \(karakter bukan hanya (. Sepertinya ini kasus yang sulit bagi saya.


7
Saran: jika Anda hanya ingin mengganti karakter untuk yang lain, penggunaan tr(anslate): echo 'Hello (world)' | tr '()' '[]'; itu output Hello [world].
Lekensteyn

Jawaban:


45

Jika Anda menggunakan sed tanpa -r (ekspresi reguler yang diperluas) itu akan berfungsi seperti yang digunakan \(\)daripada ()untuk pengelompokan:

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

Sebagai contoh

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

Jika Anda ingin menggunakan -rAnda dapat memasukkan ke (dalam [], misalnya

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

Sebagai pernyataan Lekensteyn menggunakan trmungkin lebih tepat karena Anda hanya mengganti dan Anda tidak perlu kekuatan penuh ekspresi reguler.


TL; DR: Jangan menghindarinya.
qwertzguy

Saya menggunakan ini untuk menggantikan "split" php yang sudah usang dengan fungsi "meledak", memastikan "split" didahului oleh spasi dan diikuti oleh "(".grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.