tips:
重定向写入文件 > 表示覆盖写入, >> 表示在文件尾部添加写入
匹配IP地址的正则表达式:
(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)\.(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)\.(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)\.(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)
test命令用于检验一个文件名是否是一个目录参考http://man.linuxde.net/test
demo(遍历文件,提取出所有IP地址,包括10.*.*.*这种)
#!/bin/bash function searchTarget(){ cat $1| grep -aPo '(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)\.(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)\.( 2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)\.(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)' >> /home/iknow/qa/yq/sortfile.txt cat $1 |grep -aPo '(2[0-4]\d|25[0-5]|[01]\d\d|\d\d|\d)\.\*\.\*\.\*' >> /home/iknow/qa/yq/sortfile.txt } #sortfile.txt的路径不能直接写在当前目录下,递归过程中需要不断写入原来的根目录 function travFolder(){ # echo "travFolder" flist=`ls $1` cd $1 #echo $flist for f in $flist do if test -d $f #如果$f是一个目录,则该语句为真 then #echo "dir:$f" travFolder $f else # changeName $f searchTarget $f fi done cd ../ } dir=./ksarch travFolder $dir sort -u sortfile.txt > result.txt #sort -u命令可用于文件输出去重,uniq去除的是连续的重复行 rm sortfile.txt #删除中间文件