sed用引号和IP地址替换字符串

时间:2014-02-02 08:34:18

标签: regex bash sed ip

我正在尝试设置一个docker容器,其db的IP地址和端口可能会更改。在启动容器时,我想使用“sed”将新的IP地址替换为新的。

要替换的字符串如下所示(IP和端口可以是任何有效的IP4 IP):

'dbhost' => '172.17.0.2:3306',

如果我可以将其切换为:

'dbhost' => '$MYSQL_PORT_3306_TCP_ADDR:$MYSQL_PORT_3306_TCP_PORT',

然后我可以像这样做另一个sed:

sed -i.bak 's|$MYSQL_PORT_3306_TCP_ADDR:$MYSQL_PORT_3306_TCP_PORT|'"$MYSQL_PORT_3306_TCP_ADDR:$MYSQL_PORT_3306_TCP_PORT"'|g' /config/www/config/config.php

但我认为sed命令也可能以某种方式组合。我找到了关于在IP地址上使用sed但没有忽略'dbhost'

周围的引号的文档

任何帮助都会得到极大的帮助

2 个答案:

答案 0 :(得分:1)

得到你的观点,这是修复

cat file
'dbhost' => '$MYSQL_PORT_3306_TCP_ADDR:$MYSQL_PORT_3306_TCP_PORT',

MYSQL_PORT_3306_TCP_ADDR=172.17.0.2
MYSQL_PORT_3306_TCP_PORT=3306

sed  "s|\$MYSQL_PORT_3306_TCP_ADDR:\$MYSQL_PORT_3306_TCP_PORT|$MYSQL_PORT_3306_TCP_ADDR:$MYSQL_PORT_3306_TCP_PORT|" file

'dbhost' => '172.17.0.2:3306',

答案 1 :(得分:1)

sed -i.bak "/^'dbhost' =>/ s|^.*$|'dbhost' => '$MYSQL_PORT_3306_TCP_ADDR:$MYSQL_PORT_3306_TCP_PORT',|" /config/www/config/config.php
  • 所有行开头(^),字符串'dbhost'=>
  • 替换(s)从开头(^)到结尾($)的行与您希望它看起来像

这将盲目地替换以'dbhost' =>开头的所有行。如果有多个这样的行并且您只想替换特定的行,那么您需要知道TCP_ADDR和TCP_PORT的旧值。

确保你使用sed命令本身的doble引号,而不是单个引号。否则shell不会用它们的值替换变量。