1、需求描述:因sed -i ‘s/舊端口/新端口/g’ 文件,替換會直接增加端口導致端口直接追加后面,因此需要修改
要求:2300替換為23003,23001替換為23004
<value>192.168.1.133</value></constructor-arg><constructor-arg><value>2300</value></constructor-arg></bean><!--<bean class="java.net.InetSocketAddress"><constructor-arg><value>192.168.1.133</value></constructor-arg><constructor-arg><value>23000</value></constructor-arg></bean><bean class="java.net.InetSocketAddress"><constructor-arg><value>192.168.1.133</value></constructor-arg><constructor-arg><value>23001</value></constructor-arg></bean></list><list><bean class="java.net.InetSocketAddress"><constructor-arg><value>192.168.1.133</value></constructor-arg><constructor-arg><value>23004</value></constructor-arg></bean></list>
2、sed -i ‘s/2300/23003/g’ cache.sh && sed -i ‘s/23001/23004/g’ cache.sh
執行sh替換結果就變成了這個鳥樣
3、執行替換命令
sed -i '/<value>2300<\/value>/s/2300/23003/; /<value>23001<\/value>/s/23001/23004/' cache.sh
這個 sed 命令用于在 cache.sh 文件中執行替換操作。具體來說,這個命令尋找文件中的兩個特定模式,并對這些模式中的文本進行替換。下面是這個命令的詳細解釋:
sed -i:
sed 是一個流編輯器,用于對輸入流(或文件)進行基本的文本轉換。
-i 選項表示“就地編輯”,即直接修改文件內容,而不是將結果輸出到標準輸出。
/2300</value>/s/2300/23003/:
第一個模式是 /2300</value>/,它尋找包含完整字符串 2300 的行。
s/2300/23003/ 是一個 sed 替換命令,表示在當前匹配的行中,將 2300 替換為 23003。但這里需要注意的是,由于前面的模式已經限定了 和 之間的文本,這個替換實際上只會影響 和 之間的 2300,而不會影響到其他地方的 2300。
/23001</value>/s/23001/23004/:
第二個模式與第一個類似,但它是用來尋找包含 23001 的行。
在這些行中,它將 23001 替換為 23004。
cache.sh:
這是 sed 命令要處理的文件名。
總結:這個 sed 命令在 cache.sh 文件中查找所有包含 2300 或 23001 的行,并將這些行中的 2300 替換為 23003,將 23001 替換為 23004。注意,由于使用了 -i 選項,這個替換操作會直接修改 cache.sh 文件。
拜拜!