sed命令简介
Linux sed命令可以使用shell脚本进行文件的批量处理,如批量替换、修改等等,尤其是在需要对大量文本文件进行批量操作时,使用sed命令会起到事半功倍的效果。关于详细语法介绍,请参考菜鸟教程Linux sed命令。
需求
现在需要对特定目录下的某个xml文件进行指定内容替换操作,目录下的内容如下:
![](https://img-blog.csdnimg.cn/20210523104527689.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hiXzIwMTU=,size_16,color_FFFFFF,t_70)
每个DAFront_目录下都有一个cfg/.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<TCPServer>
<LocalIP>192.168.122.141</LocalIP>
<LocalPort>1001</LocalPort>
<AllowIP>0.0.0.0</AllowIP>
<AllowConnectNum>10</AllowConnectNum>
</TCPServer>
<TCPClient>
<RemoteIP>192.168.122.141</RemoteIP>
<RemotePort>1002</RemotePort>
<ControlAckPort>8801</ControlAckPort>
<SendToIsolation>0</SendToIsolation>
<SendPackSize>5120</SendPackSize>
<UseZipData>0</UseZipData>
</TCPClient>
<MultiCastSender>
<LocalIP>0.0.0.0</LocalIP>
<MultiCastPort>1003</MultiCastPort>
<MultiCastIP>224.1.1.15</MultiCastIP>
</MultiCastSender>
<UDPCastSender>
<UdpCastIP>192.168.122.141</UdpCastIP>
<UdpCastPort>8804</UdpCastPort>
<SendPackSize>4096</SendPackSize>
<UseZipData>1</UseZipData>
</UDPCastSender>
<MultiCastRecv>
<LocalIP>192.168.122.141</LocalIP>
<MultiCastPort>9000</MultiCastPort>
<MultiCastIP>224.1.1.25</MultiCastIP>
</MultiCastRecv>
</Root>
现在要批量修改LocalIP的值(第18行),少量文件我们可以手动修改。但大量文件时,相信没有人会用这种笨方法一个一个改。于是,sed命令就显示出它的强大之处。
只需要几行shell代码,就可以轻松实现批量替换功能。
sed实现批量替换
#!/bin/sh
Dirs=`ls /opt/goldwind`
#匹配目标文件夹
str="DAFront_"
n=0
for curdir in $Dirs
do
result=$(echo $curdir | grep $str)
if [[ $result != "" ]];then
#批量替换第18行的内容,sed的动作有a(新增)、c(取代)、d(删除)、i(插入)、s(取代)...
#详细参数参考文章开头菜鸟教程Linux sed命令
#sed -i '18,18c <LocalIP>127.0.0.1</LocalIP>'是用<LocalIP>127.0.0.1</LocalIP>替换第18行的内容
sed -i '18,18c <LocalIP>127.0.0.1</LocalIP>' ${curdir}/cfg/fa_typ.xml
let n+=1;
fi
done
echo "total files in /opt/goldwind is `ls -l /opt/goldwind | wc -l`"
echo "=======目标文件夹共有${n}个,全部替换完成=========="
sed的用法不止于此,它尤其擅长自动编辑一个或多个文件、简化对文件的反复操作,随着对它的进一步了解,相信你也会爱上这个命令的。