grep -E 和 grep -P

grep -E与grep -P

周五想写一个shell脚本,目的是想检测目标jenkins网站是否有新的构建版本产生,如果有新的版本产生,那么执行a.shell这个脚本,如果没有,那么pass

jenkins网站源代码大概如下(省略不重要的部分):

<html> ...
<a href="http://xxx.com">
#123
</a>
...</html>

目标数据就是<a>标签下面的#123(#123是单独的一行)

首先用curl http://xxx.com从网站截取网页源代码,之后直接使用管道+grep将想要获取的数据过滤出来,类似curl http://xxx.com | grep -E '#\d{3}'赋值给一个字符串,不过后来想用curl http://xxx.com -o 'test.file'先讲原网页的代码输出到文件中,然后使用grep -E '#\d{3}' test.file来取出目标数据。当然了,这两种方法目的都是一样的。然而使用第一种方法的时候,屏幕会输出curl的进程流,这个并不是我想看到的,查了下,加上-s参数(使用静默模式,不会输出到标准屏幕)即可解决。

但是新的问题又来了,grep -E '#\d{3}'得到的数据是空,过滤不出来数据?

后来在网上查了一些资料,发现不同的系统,所使用的正则表达式引擎是不一样的。

当时在CentOS下面,grep -E主要是用来支持扩展正则表达式,比如|&这些符号,用于grep多条件查询,并非是使用标准正则表达式。在shell下面man grep看了下,加上-P(使用Perl的正则引擎)即可过滤出目标数据

但是在MAC OS下面man grep是没有-P参数的,为什么?因为新的主流正则引擎已经默认加上了-P参数了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,915评论 18 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,553评论 9 467
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,242评论 25 708
  • 第1章 小试牛刀 $ 是普通用户,# 表示管理员用户 root。 shebang:#!。sharp / hash ...
    巴喬書摘阅读 6,402评论 1 4
  • SHA1哈希算法是一个用来进行数字签名的算法,对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要,...
    某人在阅读 2,258评论 0 2