Bir dizeyi eğik çizgi içeren bir dizeyle sed ile nasıl değiştirebilirim?


13

Sed kullanarak bir eğik çizgi içeren bir dize ile bir dosyadaki bir dize değiştirmek için bir yol arıyorum.

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

Sonuç:

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

Yanıtlar:


31

Komutta sınırlayıcı olarak başka bir karakter kullanın s:

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

Ya da ksh93 en ile eğik çizgi kaçış ${var//pattern/replacement}parametresi genişletme operatörü (şimdi de desteklediği zsh, bash, mksh, yashBusyBox ve yeni sürümleri sh).

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

İkinci yol için +1. birincisi freebsd üzerinde çalışmaz.
ibrahim

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.