grep 用法

来源:互联网 发布:布尔玛和孙悟空 知乎 编辑:程序博客网 时间:2024/06/05 23:01
rep用于输出匹配指定正则表达式的行,相信大家对它都不陌生。
它的名字来源于ed——unix早期的一款行编辑器——的`g/re/p`命令,ed和grep是由Ken Thompson实现的,grep作为一个单独的应用最早出现于Unix V4中。

常见用法

grep常见的使用场景是结合管道,对上一条命令的结果进行过滤,比如经常用于查找进程的命令:
  1. ps -ef | grep '[p]rocess_name'
复制代码
PS: 一般我们会把`process_name`的首字母用`[]`括起来,主要是避免最后输出的结果包含了grep本身的进程。
因为正则表达式[p]rocess能匹配到“process”,但无法匹配到“[p]rocess”。

或者是搜索文件中的指定内容,比如查找日志中的特定关键字:
  1. grep 'ERROR' xxx.log | less
复制代码

grep的正则表达式语法

今天我想聊的是`grep`的正则表达式语法。`grep`支持三种正则表达式语法,分别叫做:basic regular expression(BRE)、extended regular expression(ERE)和 Perl regular expression。最后一种是实验性的特性,我也没有研究过,就暂且不表,主要讲讲前两者。对于GNU grep,BRE和ERE这两种语法提供的功能是一样的,只不过是语法不同而已;对于其他的实现,BRE语法提供的功能会更少些(嗯,没有用过其他的实现版本,所以我就不举例了^_^了)。

在BER语法中,元字符?、+、{、|、(、)并没有特殊的含义,就是表示自身,如果需要它们的特殊含义,需要使用转义的写法\?、\+、\{、\|、\(、\)。
举个例子,假设我们需要查询服务器上的tomcat和weblogic进程信息:

1. 使用BRE写法:

ps -ef | grep '\([t]omcat\|[w]eblogic\)'

  1. ps -ef | grep '\([t]omcat\|[w]eblogic\)'
复制代码

2. 使用ERE写法:

ps -ef | grep -E '([t]omcat|[w]eblogic)'

  1. ps -ef | grep -E '([t]omcat|[w]eblogic)'
复制代码

通过上面两种写法就可以看出来,BRE语法需要转义的字符太多了,如果我们写的是稍微复杂点的正则表达式,推荐使用ERE语法,即使用`grep`的`-E`选项。

参考材料
1. grep man手册:https://linux.die.net/man/1/grep
2. grep维基百科:https://en.wikipedia.org/wiki/Grep
3. Ken Thompson维基百科: https://en.wikipedia.org/wiki/Ken_Thompson


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 义安区 深圳义工 义工 江门义工 江门义工网 义工准则 义工旅行 社区义工 深圳义工网 宝安义工 性义工 处女义工 国际义工 义工网 义工活动 沙井义工吧 宝安义工网 义工申请书 义工心得 惠州义工网 苏州义工网 义工网站 国际 义工 五邑义工网 义工工作 义工服 义工社团 义工有感 社会义工 周末义工 宝安义工信息管理系统 义工是什么意思 义工怀孕小叶完整 深圳义工申请网站 深圳义工个人登陆平台 做义工有什么好处 深圳义工网站 深圳义工号查询 宝安义工网登录 深圳义工平台 深圳市义工联合会