日期:2014-05-16  浏览次数:20676 次

如何用shell解析这个文本
afct=too&kid=185265888_@U&sip=&sid=&pid=1&lac=0&acc=0&lad=0&rtt=0&rttmax=&rttavg=&pba=0&pbd=0&ara=0&arc=0&pdc=0&pdt=0&pda=0&pds=0&pks=0&pdn=0&psc=0&game=&soft=
1.36.40&time=13930923,-
afct=too&kid=878434466_@U&sip=118.72&sid=95230&pid=1&lac=0&acc=0&lad=0&rtt=0&rttmax=&rttavg=|0:0|0:0|0:0&pba=0&pbd=0&ara=0&arc=0&pdc=0&pdt=0&pda=0
&pds=0&pks=0&pdn=0&psc=0&game=&soft=107.107.103&time=13031160,-

如上面每段是“afct”开头 ,“-”结尾, 取出kid的值, soft的值,存放到一个文件,上面的结果如下:
185265888 1.36.40
878434466 107.107.103

------解决方案--------------------
你贴得有点乱,用&做分隔符,awk就可以做了。
------解决方案--------------------
其实你这里不需要知道什么开始什么结束啊,直接把kid的值, soft的值取出来就好啦.
------解决方案--------------------
cat file1 | grep -Po '(?<=kid=)\d+|(?<=soft=)[\d.]+' | xargs -n2 > file2
file2是你需要的
------解决方案--------------------
楼上正解,
我觉得写成这样更简单.
grep -Po "(?<=kid=|soft=)[0-9.]*" 你要弄的文件 |xargs -n2 > file2

其实楼主的东西也可以用awk固定筛选,因为你每行的元素个数和kid,soft位置都是一样的.