Как заменить строку на строку, содержащую косую черту с помощью 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.