Sed替换存储在变量中的行


0

我需要找到一个开头的行,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实现这一目标?



我尝试使用sed -i“s / ^ mysql.unmetric.all.url / $ ip / g”文件名,但这不起作用。你能帮忙吗
Prashanth Ganesh 2015年

Answers:


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

请注意,主替换的双引号很重要,因此将解释替换字符串。


你可以使用c不需要这么多翻译的动作(只有新行,如果有的话,而不是在这种情况下)
NeronLeVelu 2015年

@NeronLeVelu - “行动c” 是什么意思?我不知道那个命令,默认情况下它没有安装在Ubuntu中,并且它不是一个容易搜索的名称。或者它是一个选项sed(我的版本不包括)?
AFH

c是一个sed动作'通过跟随内容''改变行的内容(实际上是工作缓冲区)'。它通过以下行替换当前行/内容c,未来内容的新行被替换为``因此可以使用多行替换。
NeronLeVelu 2015年

@NeronLeVelu - 好的,谢谢。我没有使用过那个命令,但我会记住它以备将来参考。
AFH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.