对比并删除重复文本内容的shell脚本

该脚本的功能是在文件1中删除与文件2中相匹配的IP地址,即文件2中出现的IP地址如果在文件1中也存在的话,则删除文件1中相应的IP地址。

#!/bin/bash

# 任务执行时间
checktime=`date "+%Y%m%d%H%M%S"`
# 源IP列表文件
sourcelist="/opt/ip/sourcelist.txt"
# 待处理IP列表文件
blacklist="/opt/ip/blacklist.txt"
# 待删除的IP列表文件
whitelist="/opt/ip/whitelist.txt"
# 有问题的IP列表文件
errorlist="/opt/ip/errorlist.txt"

# 检查是否有源IP列表文件
if [ -e "${sourcelist}" ]
then
  # 去掉IP列表中可能存在的空格
  sed -i 's/\ |^$//g' ${sourcelist}
  # 处理blacklist中的其他IP地址,以X字符为例
  grep -E "X|x|\/" "${sourcelist}" >> "${errorlist}"
  # 验证IP地址是否合法
  egrep -o "((25[0-5]\.)|(2[0-4][0-9]\.)|(1[0-9][0-9]\.)|([1-9][0-9]\.)|([1-9]\.))((25[0-5]\.)|(2[0-4][0-9]\.)|(1[0-9][0-9]\.)|([1-9][0-9]\.)|([0-9]\.)){2}((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|([1-9]))" "${sourcelist}" > "${blacklist}".tmp
  sort -u "${blacklist}".tmp >> "${blacklist}"
  # 删除sourcelist和临时文件
  rm -f ${sourcelist}
  rm -f ${blacklist}.tmp
  touch ${sourcelist}
elif  [ -s "${blacklist}" ]
then
  cp "${blacklist}" "${blacklist}-${checktime}"
else
  exit 1
fi
# 检查是否有待删除的IP列表
if [ -s "${whitelist}" ]
then
  # 去掉whitelist列表中可能存在的空格
  sed -i 's/\ //g' "${whitelist}"
  cp "${whitelist}" "${whitelist}-${checktime}"
else
  exit 1
fi

# 开始处理IP列表
cat "${whitelist}" | while read ip
do
  ip1=`echo ${ip} | awk -F'/' '{print $2}'`
  ip2=`echo ${ip} | awk -F'-' '{print $2}'`
  # 处理IP地址
  if [ -z "${ip1}" ] && [ -z "${ip2}" ]
  then
    eval sed -i '/^$ip$/d' "${blacklist}"
  # 处理IP网段
  elif [ -n "${ip1}" ]
  then
    ipn="${ip%.*}\."
    # 本案例只处理子网掩码为24的情况,其他子网需要根据子网掩码ipz和起始地址ips的值进行分析
    # ipz=${ip##*/}
    # ips=`echo ${ip##*.} | awk -F'/' '{print $1}'`
    eval sed -i '/^$ipn/d' "${blacklist}"
    eval sed -i '/^$ipn/d' "${errorlist}"
  # 处理IP区间
  else
    ips=`echo ${ip} | awk -F'[.-]' '{print $4}'`
    ipe=`echo ${ip} | awk -F'[.-]' '{print $NF}'`
    for tmp in `seq $ips $ipe`
    do
      ip=`echo ${ip} | awk -F'.' '{print $1"."$2"."$3}'`.${tmp}
      eval sed -i '/^$ip$/d' "${blacklist}"
    done
  fi
done
# 清空待删除IP列表
rm -f "${whitelist}"
touch "${whitelist}"

原创文章禁止转载:技术学堂 » 对比并删除重复文本内容的shell脚本

精彩评论

6+8=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏