该脚本的功能是在文件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脚本