У меня есть образец входного файла:

 $ cat test.txt 

 xz:xx.d.r1.latest

Теперь я хочу заменить деталь новым значением. Например: я хотел заменить r1 на r2 в приведенном выше тексте, чтобы новый o/p был

 xz:xx.d.r2.latest

Я хотел сделать это с помощью переменных. Например, рассмотрим значение, подлежащее замене, сохраненное в переменной old а значение, которое необходимо заменить в переменной new:

 $ old=r1
 $ new=r2

Теперь для замены я попробовал

sed -i 's/'"${old}"'/'"${new}"'/g' test.txt
sed -i "s/$old}/${new}/g" test.txt
sed -i 's/'"$old"'/'"$new"'/g' test.txt
sed -i "s/${old}/${new}/g" test.txt

Но никто из них не работал, значение не заменяется. Так что кто-нибудь может мне помочь или сказать, правильный ли синтаксис или чего мне не хватает.

1 ответ1

0

Если вы используете sed BSD (например, в macOS), опция -i является нестандартным расширением FreeBSD и требует аргумента. Поэтому, чтобы убедиться, что вы используете правильный кросс-совместимый синтаксис, вы должны изменить его на:

sed -i'.bak' ... # rest of the command

Кроме этого, ваши команды в порядке. Например

sed -i'.bak' 's/'"${old}"'/'"${new}"'/g' test.txt

Протестировано в оболочке Bash на WSL (Ubuntu на Windows).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .