shell 脚本,提取文件中的内容
使用awk、cut、sed、if、while 等
awk、cut、sed还是很重要的
这是后来修改的,可以完成
#!/bin/bash
#conver format
FILE=mobile_dpi.rules
APPFILE=app_dic.rc.BAK_2
CONVERFILE=mobile_dpi.txt
rm -rf ${CONVERFILE}
cat ${FILE} | grep "^a" | while read -r LINE
do
PROTO_TYPE=$( echo $LINE | awk '{print $2}' )
DIR=$( echo $LINE | awk '{print $4 $5 $6}' )
STR=$(echo $LINE | awk -F '>' '{for(i=2;i<=NF;i++) printf $i}')
TMPSTR=x
VAR=1
CONTENTEXPRESS=""
PCREEXPRESS=""
MSG=""
IDSTR=""
while [ "$TMPSTR"x != ""x ]
do
TMPSTR=$(echo $STR | awk -F ';' '{i='"$VAR"'; print $i}')
if [ "$(echo $TMPSTR | grep "msg:")"x != ""x ];then
MSG=$(echo $TMPSTR | awk -F '\"' '{print $2}')
fi
if [ "$(echo $TMPSTR | grep "app:id")"x != ""x ];then
IDSTR=$(echo $LINE | cut -d '$' -f 2 | cut -d '(' -f 2 | cut -d ')' -f 1 | cut -d ':' -f 1)
ID=$(cat $APPFILE | grep $IDSTR | head -1 | awk -F ';' '{print $2}' )
fi
if [ "$(echo $TMPSTR | grep "pcre:")"x != ""x ];then
PCREEXPRESS=$(echo $TMPSTR | awk -F '\"' '{print $2}')
fi
CONTENT=""
if [ "$(echo $TMPSTR | grep "content:")"x != ""x ];then
CONTENT=$(echo $TMPSTR | awk -F '\"' '{print $2}')
if [ "$(echo $CONTENT | grep '|')"x != ""x ];then
STR1=$(echo $CONTENT | cut -d '|' -f 1)
CUTSTR=$(echo $CONTENT | cut -d '|' -f 2)
STR2=$(echo $CONTENT | cut -d '|' -f 3)
CUTSTR=$( echo $CUTSTR| awk '{for(i=1;i<=NF;i++) {printf("\\\\x%s",$i);}}' )
CONTENT="${STR1}""${CUTSTR}""${STR2}"
CONTENTEXPRESS="${CONTENTEXPRESS}""(.*)""${CONTENT}"
else
CONTENTEXPRESS="${CONTENTEXPRESS}""(.*)""${CONTENT}"
fi
fi
VAR=$(($VAR+1))
done
CONTENTEXPRESS=${CONTENTEXPRESS#\(.*\)}
EXPRESS=""
if [ "$PCREEXPRESS"x != ""x ];then
EXPRESS=$PCREEXPRESS
else
EXPRESS=$CONTENTEXPRESS
fi
if [ "$EXPRESS"x != ""x ];then
echo "PROTOCOL:${PROTO_TYPE};DIR:C->S;ID:${ID};MSG:${MSG};EXPRESS:\"${EXPRESS}\"" >> ${CONVERFILE}
fi
done
这是之前的,比较乱
#!/bin/bash
#conver format
FILE=mobile_dpi.rules
APPFILE=app_dic.rc.BAK_2
CONVERFILE=mobile_dpi.txt
rm -rf ${CONVERFILE}
cat ${FILE} | grep "^a" | while read LINE
do
PROTO_TYPE=$( echo $LINE | awk '{print $2}' )
DIR=$( echo $LINE | awk '{print $4 $5 $6}' )
MSG=$(echo $LINE | cut -d '(' -f 2 | cut -d ')' -f 1 | awk -F ';' '{print $1}' | awk -F ':' '{print $2}')
IDSTR=$(echo $LINE | cut -d '$' -f 2 | cut -d '(' -f 2 | cut -d ')' -f 1 | cut -d ':' -f 1)
ID=$(cat $APPFILE | grep $IDSTR | head -1 | awk -F ';' '{print $2}' )
EXPRESTR=$(echo $LINE | awk -F '(' '{for(i=1;i<=NF;i++) printf $i}' | awk -F ';' '{for(i=2;i<=NF-2;i++)printf $i";"}')
HEAD=$(echo $EXPRESTR | awk -F ';' '{print $1}' | awk -F '\"' '{print $1}')
if [ "$HEAD"x == "pcre:"x ]; then
EXPRESS=$(echo $EXPRESTR | awk -F ';' '{print $1}' | awk -F '\"' '{print $2}')
else
EXPRESS=$(echo $EXPRESTR | awk -F '\"' '{i=1;for(i=i*2;i<=NF;i+=2)printf $i"{?}"}')
STRTMP=$(echo "$EXPRESS" |grep '|')
if [ $? -eq 0 ];then
echo $EXPRESS
# EXPRESS=$(echo $EXPRESS| awk -F '|' '{for(i=2;i<=NF;i+=2) printf $i"{?} " }'| awk '{for(i=1;i<=NF;i++){printf("\\\\x%s",$i)}}')
fi
EXPRESS=${EXPRESS%%\{?\}}
fi
echo "PROTOCOL:${PROTO_TYPE};DIR:C->S;ID:${ID};MSG:${MSG};EXPRESS:\"${EXPRESS}\"" >> ${CONVERFILE}
done
shell 脚本,提取文件中的内容的更多相关文章
- Python之通配符--提取文件中的内容并输出
前言:我的学习进度其实没有那么快的,因为现在是网络工程师实习,只有晚上一点时间和周末有空,所以周一到周天的学习进度很慢,今天之所以突然跳到通配符是因为工作需要,大体讲一下我的工作需求:网络工程师就是写 ...
- 利用shell脚本统计文件中出现次数最多的IP
比如有如下文件test.txt 1 134.102.173.43 2 134.102.173.43 3 134.102.171.42 4 134.102.170.9 要统计出现次数最多的IP可 ...
- 三.Shell脚本提取文件名称和所在的目录
一·简介 提取文件名称或者目录,一般都会使用到#,##,%和%%,但是他们的区别很容易记混淆了.在一下4种方式中,目标匹配字符是不在结果中. #:表示从左开始算起,并且截取第一个匹配的字符 ##:表示 ...
- shell 脚本替换文件中某个字符串
1.将当前目录下包含jack串的文件中,jack字符串替换为tom sed -i "s/jack/tom/g" `grep "jack" -rl ./` 2.将 ...
- shell脚本替换文件中字符
1.将当前目录下包含jack串的文件中,jack字符串替换为tom sed -i "s/jack/tom/g" `grep "jack" -rl ./` 2.将 ...
- 使用shell脚本往文件中加一列
上午大学同学问了我一个脚本的问题,大概需求就是看到所有端口的开启情况,还要知道每个端口的应用程序路径,而且要和之前的数据齐平,就是再加一列数据.我腚眼一看,非常容易嘛,但由于当时忙,所以就说中午给他发 ...
- shell脚本获取文件中key/value的小方法
方法有N种,awk.sad.grep.cut... 以上几种方式不写了,就写两个不太常用到的. 废话少说,直接上代码: cat a.txt aa.gif=aaaa.gif bb.gif=bbbb.gi ...
- linux shell 脚本获取和替换文件中特定内容
1.从一串字符串中获取特定的信息 要求1:获取本机IP:menu.lst为系统镜象的IP配置文件,需要从中获取到本机IP信息(从文件获取信息) timeout title live find --se ...
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...
随机推荐
- halcon运行版设置
- 转-Spring Framework中的AOP之around通知
Spring Framework中的AOP之around通知 http://blog.csdn.net/xiaoliang_xie/article/details/7049183 标签: spring ...
- 基站查询接口,基站查询API
查询接口为商用,用于软件开发,非开发用户用不上.(说明:接口不能进行手机定位) 如需申请key,请联系QQ 2258172309. 1.移动联通基站查询接口 请求示例:http://www.cellm ...
- acm之poj题库1001方法
题目所言是银行等不能用四舍五入等影响精度的方法来计算的情况,是为提出背景.因此需要特殊的编写.这里使用了好几种方法才找到一个合适的方法.因为C++或者C缺乏类库,又跟底层关联太大,缺乏常用的类库,在写 ...
- UIScrollView的使用
UIScrollView表示可滚动的视图,它最主要的使用场景是让用户可以通过拖拽显示布置一屏的数据. 常用的属性或者方法有: frame:NSRect显示范围,小于屏幕尺寸的矩形区域: content ...
- 常用Web Service汇总(天气预报、时刻表等)
现成的Web Service中有很多很好用的,比如天气预报,IP地址搜索,火车时刻表等等.本文汇总的一些常用Web Service,希望对大家有所帮助. AD: ================= ...
- Mapcontrol 遍历所有图层方法
mapcontrol 遍历所有图层方法 2011-04-29 19:51 通过IMap中的get_layers()可以遍历MapControl中当前的图层.此方法可以通过指定UID对图层进行过滤或者分 ...
- (转载)iOS开发历程书籍推荐
http://www.zhihu.com/question/19649679 我来说说我学习的过程:(无耻的使用一个回答 回答了很多问题.^^) 第一步,精读 Stephen G. Kochan 的& ...
- Python不完全入门指南
适用范围: 有一定编程基础,想快速入门python的人群 说明: 使用jupyter notebook编写,可以使用nbviewer网站进行查看. Python不完全入门指南 项目放在github上, ...
- 经典Linq实例语句
从技术角度而言,LINQ定义了大约40个查询操作符,如select.from.in.where以及order by(C#中).使用这些操作符可以编写查询语句.不过,这些查询还可以基于很多类型的数据,每 ...