簡體   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