Мне нужно найти строку, которая начинается с mysql.unmetric.twt.url и заменить всю строку строкой, хранящейся в переменной ip.

ip="mysql.unmetric.twt.url=jdbc:mysql://ec2-a-b-c-d.compute-1.amazonaws.com:3306/unmetric? jdbcCompliantTruncation=false&useUnicode=yes&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true"

Как этого можно добиться с помощью sed?

1 ответ1

1

Есть два этапа: сначала вам нужно экранировать любые специальные символы в $ip:

echo $ip|sed 's#[./&?]#\\&#g'

Затем нужно выполнить замену:

sed -i "s/^mysql\.unmetric\.twt\.url.*$/replacement/g" filename

Вместе они дают:

sed -i "s/^mysql\.unmetric\.twt\.url.*$/$(echo $ip|sed 's#[./&?]#\\&#g')/g" filename

Обратите внимание, что двойные кавычки для основной замены важны, так что строка замены будет интерпретирована.

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