免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2308 | 回复: 5

[文本处理] grep -E与grep -P有哪些区别,grep -P到底有哪些grep -E没有的功能 [复制链接]

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2017-12-16 23:30 |显示全部楼层
根据man  grep的解释:

Matcher Selection
       -E, --extended-regexp
              Interpret PATTERN as an extended regular expression (ERE, see below).  (-E is specified by POSIX.)

-P, --perl-regexp
              Interpret PATTERN as a Perl regular expression (PCRE, see below).  This is highly experimental and grep -P may warn of unimplemented features.

在实际的情况中,如果我想找一个tomcat的进程,使用grep  -E , 如下所示:
root@redhat:/etc/apache-tomcat# ps -eaf | grep tomcat | grep catalina.home | grep -v grep |  grep -E "^(\w+|\d+)\s+\d+" -o
没有匹配到任何结果
而使用grep -P,如下所示:
root@
redhat:/etc/apache-tomcat
# ps -eaf | grep tomcat | grep catalina.home | grep -v grep |  grep -P "^(\w+|\d+)\s+\d+" -o
root      6003
可以显示出如上的结果

我想问一下grep -P支持的哪些正则表达式,而grep -E是不支持的?
grep -P具体比grep -E强在哪些地方?


论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2017-12-17 02:46 |显示全部楼层
回复 1# 274920831

"grep -E":
  1. man -s7 regex
复制代码
"grep -P":
  1. man pcresyntax
复制代码

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2017-12-17 13:44 |显示全部楼层
回复 2# q1208c

root@redhat:~# man -s7 regex
这个是有说明手册的

root@redhat:~# man pcresyntax
No manual entry for pcresyntax


论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2017-12-17 17:02 |显示全部楼层
回复 1# 274920831


grep中的-E和-P是两种正则表达式流派,二者区别很大:
-E:POSIX规范中的ERE,即扩展型正则表达式
-P:Perl兼容的正则表达式
比如你提到的 \w,\d,\s这种记法在ERE中是不支持的,如果想详细了解就系统的学习一下不同流派的正则表达式记法吧。


论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2017-12-18 10:16 |显示全部楼层
回复 4# wh7211

谢谢了。

论坛徽章:
0
发表于 2017-12-18 13:22 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP