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



我正在尝试设置一个docker容器,该容器的IP地址和端口可能会更改。在容器的启动时,我想使用" sed"将上一个IP地址替换为新的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"的引号

任何帮助都将得到极大的认可

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的旧值。

并确保您使用doble引号,而不是单个命令。否则,壳将不会用其值替换变量。

有您的观点,这是修复

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',

相关内容

  • 没有找到相关文章

最新更新