Як замінити рядок на рядок, що містить косу рису на sed?


13

Я шукаю спосіб замінити рядок у файлі рядком, який містить косу рису, використовуючи sed.

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

Результат:

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

Відповіді:


31

Використовуйте інший символ як роздільник у sкоманді:

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

Або уникнути риски з ksh93 ігровий ${var//pattern/replacement}оператора розширення параметрів (тепер також підтримується zsh, bash, mksh, yashі останні версії BusyBox sh).

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

+1 для другого шляху. перший не працює на freebsd.
ібрагім

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.