Я использую ниже кода для замены строки в сценарии оболочки.
echo $LINE | sed -e 's/12345678/"$replace"/g'
но это становится замененным $replace
вместо значения той переменной.
Кто-либо мог сказать то, что пошло не так, как надо?
Если вы хотите интерпретировать $ replace
, вам не следует использовать одинарные кавычки, поскольку они предотвращают замену переменных.
Попробуйте:
echo $LINE | sed -e "s/12345678/\"${replace}\"/g"
при условии, что вы хотите вставить кавычки. Если вы не хотите цитаты, используйте:
echo $LINE | sed -e "s/12345678/${replace}/g"
Транскрипт:
pax> export replace=987654321
pax> echo X123456789X | sed "s/123456789/${replace}/"
X987654321X
pax> _
Просто будьте осторожны, чтобы убедиться, что $ {replace}
не имеет символов, значимых для sed
(например, /
), так как это вызовет путаницу, если не будет экранировано. Но если, как вы говорите, вы заменяете один номер другим, это не должно быть проблемой.
echo $LINE | sed -e 's/12345678/'$replace'/g'
вы все еще можете использовать одинарные кавычки, но вы должны "открыть" их, когда хотите, чтобы переменная была расширена в нужном месте. иначе строка будет восприниматься "буквально" (как правильно сказал @paxdiablo, его ответ также правильный)
.вы можете использовать оболочку (bash / ksh).
$ var="12345678abc"
$ replace="test"
$ echo ${var//12345678/$replace}
testabc