免费注册 查看新帖 |

Chinaunix

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

[文本处理] grep -oP 求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-07 10:09 |只看该作者 |倒序浏览
grep -oP '(?<=")[^"]+":"[^"]+(?=")' datafile | sed 's/":"/=/g' > datafile2

求哪位大侠帮我解释下期中的正则表达?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2015-09-07 10:23 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-07 10:29 编辑

回复 1# alex_icetea
grep正则第一次命中部分:
1.1 查找一个以双引号包围字符串,但排除作为字符串定界符的第一个双引号的匹配 (空串除外)
1.2 接着匹配一个字面字符 ":"
1.3 意思和第一个大体相似,对于字符串定界符的意思取反

如有解释不对的地方还请大家指正,避免误导lz. 小弟在此拜谢大家!

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
3 [报告]
发表于 2015-09-07 10:47 |只看该作者
回复 2# sunzhiguolu


    目测,是取一行中第一个引号后面的,并满足如下规则的字串

xxoo“:”xxoo,xxoo是非双引号字符组成的字串,

然后通过sed把:替换成等号

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2015-09-07 11:02 |只看该作者
回复 3# jeffreyst
感谢您的帮助,看来解决问题要着眼于全局啊! 小弟光顾着前面部分了,o(∩∩)o...哈哈. 让您见笑了. 多谢多谢!

   

论坛徽章:
0
5 [报告]
发表于 2015-09-07 11:05 |只看该作者
回复 2# sunzhiguolu


    谢谢。 还有些地方不太明白,能再指点一下么
1. (?<=") 是匹配双引号后面的内容,那[^"]是指什么,后面的+又是指什么

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2015-09-07 11:18 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-07 11:22 编辑

回复 5# alex_icetea

"[^]" 排除型字符组,在此位置匹配除了某个指定"字符"之外的一个字符,在此处 ",双引号即是那个特定字符
+ 元字符,限定前面元素的匹配数量. 至少匹配一次,或任意多次.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2015-09-07 11:43 |只看该作者
本帖最后由 MMMIX 于 2015-09-07 11:44 编辑
alex_icetea 发表于 2015-09-07 11:05
回复 2# sunzhiguolu

(?<=") 是匹配双引号后面的内容


(?<=") 本身是 Perl 正则中的 zero-width look-behind assertion,用来修改后面正则的行为,相当于一个条件。例如 (?<=")regex 表示若 regex 匹配的内容前面是双引号,则整个 (?<=")regex 匹配成功;否则即使 regex 能匹配上,作为一个整体,(?<=")regex 的匹配也是不会成功的。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
8 [报告]
发表于 2015-09-07 12:08 |只看该作者
回复 7# MMMIX
谢谢大神对于环视的解释,我对这方面理解的总是不太清楚. 收获颇丰!
不必回帖,只为道谢...  

   

论坛徽章:
0
9 [报告]
发表于 2015-09-07 13:13 |只看该作者
回复 8# sunzhiguolu

终于搞明白了,脑子转的慢,非常感谢。
   

论坛徽章:
0
10 [报告]
发表于 2015-09-07 13:16 |只看该作者
回复 7# MMMIX


    给我最大迷惑的其实是双引号,一开始以为双引号这边有特殊用途,没想到这里只是一个简单字符, 如果是\"的话会比较好理解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP