Bagaimana cara mengganti string dengan string yang berisi slash dengan sed?


13

Saya mencari cara untuk mengganti string dalam file dengan string yang berisi garis miring dengan menggunakan sed.

connect="192.168.100.61/foo"
srcText="foo.bar=XPLACEHOLDERX"
echo $srcText | sed "s/XPLACEHOLDERX/$connect"

Hasilnya adalah:

sed: -e Expression #1, Character 32: Unknown option for `s'

Jawaban:


31

Gunakan karakter lain sebagai pembatas dalam sperintah:

printf '%s\n' "$srcText" | sed "s|XPLACEHOLDERX|$connect|"

Atau melarikan diri dari garis miring dengan ksh93 ini ${var//pattern/replacement}Operator ekspansi parameter (kini juga didukung oleh zsh, bash, mksh, yashdan versi terbaru dari busybox sh).

printf '%s\n' "$srcText" | sed "s/XPLACEHOLDERX/${connect//\//\\/}/"

+1 untuk cara kedua. yang pertama tidak bekerja di freebsd.
ibrahim

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.