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 文件。
拜拜!