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.

dwwdw
sumber
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.

NN
sumber
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