Замените строку в сценарии оболочки с помощью переменной

Я использую ниже кода для замены строки в сценарии оболочки.

echo $LINE | sed -e 's/12345678/"$replace"/g'

но это становится замененным $replace вместо значения той переменной.

Кто-либо мог сказать то, что пошло не так, как надо?

81
задан fedorqui 8 May 2015 в 10:03
поделиться

3 ответа

Если вы хотите интерпретировать $ 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 (например, / ), так как это вызовет путаницу, если не будет экранировано. Но если, как вы говорите, вы заменяете один номер другим, это не должно быть проблемой.

127
ответ дан 24 November 2019 в 09:27
поделиться
echo $LINE | sed -e 's/12345678/'$replace'/g'

вы все еще можете использовать одинарные кавычки, но вы должны "открыть" их, когда хотите, чтобы переменная была расширена в нужном месте. иначе строка будет восприниматься "буквально" (как правильно сказал @paxdiablo, его ответ также правильный)

.
4
ответ дан 24 November 2019 в 09:27
поделиться

вы можете использовать оболочку (bash / ksh).

$ var="12345678abc"
$ replace="test"
$ echo ${var//12345678/$replace}
testabc
67
ответ дан 24 November 2019 в 09:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: