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 #删除中间文件