Как заменить строку на строку, содержащую косую черту с помощью 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//\//\\/}/"
manatwork
источник
+1 за второй путь. первый не работает на freebsd.
Ибрагим
2

Если ваша оболочка поддерживает это:

"${srcText/XPLACEHOLDERX/$connect}"
Дерек Шрок
источник