批量文本文件内容替换之Linux sed命令

sed命令简介

Linux sed命令可以使用shell脚本进行文件的批量处理,如批量替换、修改等等,尤其是在需要对大量文本文件进行批量操作时,使用sed命令会起到事半功倍的效果。关于详细语法介绍,请参考菜鸟教程Linux sed命令

需求

现在需要对特定目录下的某个xml文件进行指定内容替换操作,目录下的内容如下:

每个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的用法不止于此,它尤其擅长自动编辑一个或多个文件、简化对文件的反复操作,随着对它的进一步了解,相信你也会爱上这个命令的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值