Bash, найти и заменить строку параметризованным значением, сгенерированным внутри кода? - PullRequest
0 голосов
/ 14 апреля 2020

Ниже ссылки, которую я уже пробовал, но потерпел неудачу:

найти и заменить строку в файле

Кажется, что это очень легко решить, но я застрял и не в состоянии разрешить

Итак, у меня есть файл, внутри которого есть несколько полей, как показано ниже:

env : $env

user : abc

passowrd : xyv

tablename : cat_$env 

tablelocation : hdfs://home/ak/cat_$env

Итак, мое требование - заменить $env на $env_details (который я генерирую) в моем сценарии оболочки) означает, что значение $env_details продолжает изменяться при каждом запуске, я пробовал команду ниже, но получил ошибку:

sed -i "s/$env/$env_details/g" "$filename"

Error: sed: -e expression #1 , char 0 no previous regular expression

Не могли бы вы помочь с моей ошибкой?

1 Ответ

1 голос
/ 14 апреля 2020

Ваша ошибка в том, что оболочка пытается развернуть $env, если она находится внутри двойных кавычек, так же, как она расширяет $filename. Просто напишите

sed -i 's/$env/$env_details/g' "$filename"

Если вы хотите заменить на $env_details содержимое, сохраните двойные кавычки и экранируйте $ из $env:

sed -i "s/\$env/$env_details/g" "$filename"
...