Подтвердить что ты не робот

Как использовать переменную bash script с sed

Я выполняю следующее bash script:

#!/bin/bash
version=$1
echo $version
sed 's/\${version.number}/$version/' template.txt > readme.txt

Я ожидаю заменить все экземпляры ${version.number} содержимым переменной "version". Вместо этого вставляется буквальный текст $version.

Что мне нужно сделать, чтобы заставить sed использовать текущее значение $version вместо?

4b9b3361

Ответ 1

sed "s/\${version.number}/$version/" template.txt > readme.txt

Только двойные кавычки заменяют знак доллара. Это также означает, что одиночные кавычки не требуют, чтобы знак доллара был экранирован.

Ответ 2

Вы также можете просто исключить переменные

sed 's/'${version.number}'/'$version'/' template.txt > readme.txt

Ответ 3

Это немного устарело, но все равно может быть полезно... Для меня это работало с использованием двойного побега, как сказал Филипп (и избегая круглых скобок, если вы их используете...):

#!/bin/bash
LIVE_DB_NAME='wordpress';
STAGING='staging';
sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1;