繁体   English   中英

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

[英]sed replace a string with quotes and an IP address

我正在尝试设置一个Docker容器,其db的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'周围的引号

任何帮助将不胜感激

明白了,这就是解决方法

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',
sed -i.bak "/^'dbhost' =>/ s|^.*$|'dbhost' => '$MYSQL_PORT_3306_TCP_ADDR:$MYSQL_PORT_3306_TCP_PORT',|" /config/www/config/config.php
  • 对于所有以(' ^ host)开头的字符串'dbhost'=>的行
  • 替补( s )从一开始(行^ )到结束( $ ),你想要什么样子

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

并确保您对sed命令本身使用双引号,而不是单引号。 否则,外壳程序将不会用其值替换变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM