添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
精彩文章免费看

grep -E 和 grep -P

grep -E与grep -P

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

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

<html> ...
<a href="http://xxx.com">
...</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 参数了。

最后编辑于:2017-11-27 00:16