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

文章目录

  • sed命令简介
  • 需求
    • sed实现批量替换

sed命令简介

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

需求

现在需要对特定目录下的某个xml文件进行指定内容替换操作,目录下的内容如下:
批量文本文件内容替换之Linux sed命令_第1张图片
每个DAFront_目录下都有一个cfg/.xml文件,文件内容如下:


<Root>
  <TCPServer>
    <LocalIP>192.168.122.141LocalIP>
    <LocalPort>1001LocalPort>
    <AllowIP>0.0.0.0AllowIP>
    <AllowConnectNum>10AllowConnectNum>
  TCPServer>
  <TCPClient>
    <RemoteIP>192.168.122.141RemoteIP>
    <RemotePort>1002RemotePort>
    <ControlAckPort>8801ControlAckPort>
    <SendToIsolation>0SendToIsolation>
    <SendPackSize>5120SendPackSize>
    <UseZipData>0UseZipData>
  TCPClient>
  <MultiCastSender>
<LocalIP>0.0.0.0LocalIP>
    <MultiCastPort>1003MultiCastPort>
    <MultiCastIP>224.1.1.15MultiCastIP>
  MultiCastSender>
  <UDPCastSender>
    <UdpCastIP>192.168.122.141UdpCastIP>
    <UdpCastPort>8804UdpCastPort>
    <SendPackSize>4096SendPackSize>
    <UseZipData>1UseZipData>
  UDPCastSender>
  <MultiCastRecv>
    <LocalIP>192.168.122.141LocalIP>
    <MultiCastPort>9000MultiCastPort>
    <MultiCastIP>224.1.1.25MultiCastIP>
  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 127.0.0.1'是用127.0.0.1替换第18行的内容
sed -i '18,18c 127.0.0.1' ${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的用法不止于此,它尤其擅长自动编辑一个或多个文件、简化对文件的反复操作,随着对它的进一步了解,相信你也会爱上这个命令的。

你可能感兴趣的:(Shell脚本,Linux,shell,linux)