免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2850 | 回复: 8
打印 上一主题 下一主题

[文本处理] awk 方括号取值问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-18 16:21 |只看该作者 |倒序浏览
文本
server agent ip[192.168.10.15] uid[585721] msg[get ]ca[!]ch[[]]e][[ userinfo] key[we]

取最外层方括号里面内容,用|分割


处理结果
192.168.10.15|585721|get ]ca[!]ch[[]]e][[ userinfo|we

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
2 [报告]
发表于 2014-11-18 16:43 |只看该作者
把分隔符设为][

awk -F '[][]' 这样的吧

论坛徽章:
1
2015七夕节徽章
日期:2015-08-21 17:58:43
3 [报告]
发表于 2014-11-18 16:48 |只看该作者
server agent ip[192.168.10.15] uid[585721] msg[get ]ca[!]ch[[]]e][[ userinfo] key[we]

这里有点问题吧

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2014-11-18 16:48 |只看该作者
像这样的文本不好分析:
最外层匹配不齐:
server agent ip[192.168.10.15] uid[585721] msg[get ]ca[!]ch[[]]e][[ userinfo] key[we]

get两边有[和],却不是你想要的最外层

论坛徽章:
0
5 [报告]
发表于 2014-11-18 17:27 |只看该作者
  1. sed -r 's/\] ...\[/|/g;s/.+\[([0-9]+.+)\]/\1/'
复制代码
回复 1# skypeleo


   

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
6 [报告]
发表于 2014-11-18 19:26 |只看该作者
本帖最后由 reyleon 于 2014-11-18 19:27 编辑



投机取巧的做法, 不知道是否符合你的要求?
  1. >>> strings = 'server agent ip[192.168.10.15] uid[585721] msg[get ]ca[!]ch[[]]e][[ userinfo] key[we]'   
  2. >>> import re                                                                                       
  3. >>> re.findall('\[(.*?)\] ',re.sub(',' ',strings))                                                
  4. ['192.168.10.15', '585721', 'get ]ca[!]ch[[]]e][[ userinfo', 'we']
  5. >>> print '|'.join(re.findall('\[(.*?)\] ',re.sub(',' ',strings)))
  6. 192.168.10.15|585721|get ]ca[!]ch[[]]e][[ userinfo|we
  7. >>>





复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2014-11-18 19:53 |只看该作者
回复 1# skypeleo

$ awk -F"]( +|$)" '{OFS="|";NF--;for(n=1;n<=NF;n++)sub(/^[^[]+\[/,"",$n)}1' FILE
192.168.10.15|585721|get ]ca[!]ch[[]]e][[ userinfo|we

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2014-11-18 22:12 |只看该作者
厉害
回复 7# jason680


   

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
9 [报告]
发表于 2014-11-19 11:09 |只看该作者
回复 7# jason680

思路不错
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP