专栏首页北京马哥教育文本过滤之grep,egreo及fgrep 三剑客及正则表达式

文本过滤之grep,egreo及fgrep 三剑客及正则表达式

关于grep,egrep以及fgrep,是我们linux服务器中常用的文本过滤工具。掌握好这三个工具并结合正则表达式,对我们日后的运维工作有很大的帮助。

1.grep,egrep,及fgrep区别。

三者的主要区别在于对正则表达式的支持不同。首先,grep支持的是标准正则表达式;而egrep及grep -e则支持的是扩展正则表达式;至于fgrep,是不支持正则表达式的,在本文也就不再赘述。但是其在速度方面,相对前面两者,就比较快了,在精确匹配是就很好用。

2.支持的常用选项

选项

作用

--color=auto

设置语法着色(可用alias默认使用)

-v

反向选取

-o

仅显示匹配到的字符串

-i

不区分大小写

-E(仅grep支持)

使用扩展正则表达式

-A #

显示匹配到行及其前的#行

-B #

显示匹配到行及其后的#行

-C #

显示匹配到行及其前的#行和其后的#行

3.常用字符合集(注:可在正则表达式的字符匹配中结合[]或[^]使用)

[:digit:] 所有数字
[:lower:] 所有小写字母
[:upper:] 所有大些字母
[:space:] 空白字符
[:punct:] 标点符号
[:alpha:] 大写加小写字母
[:alnum:] 所有字母加数字

4.标准正则表达式的元字符

(注:为了使效果更明显,已设置别名alias grep="grep --color=auto".所使用示例文件在文章最下方)

  • 字符匹配

.:匹配任意单个字符

[root@localhost ~]# grep "r..t" /etc/passwd root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[]:匹配指定范围内的任意单个字符

[root@localhost ~]# grep "r[[:alpha:]].t" /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin

如上所示,[:alpha:]表示所有字母的集合,所以外边再加个[]就是所有小写字母其中的一个了。

所以在第一次匹配的v/ftp也就因为第二个不是字母而没有匹配到了.

[^]取反,也就是指定范围外的任意单个字符

[root@localhost ~]# grep "r[^[:alpha:]].t" /etc/passwdftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

如上图,[:alpha:]表示所有字母的集合,所以外边再加个[^]就是非所有小写字母其中的一个。

所以root就匹配不到,而v/ftp就匹配到了.

  • 次数匹配

*:任意其前面的字符任意次

[root@localhost ~]# grep “b*c” testbcbbcabbbc

\?:匹配其前字符零次或一次

[root@localhost ~]# grep "b\?c" testbcbbcabbbc

\{m,n\}:匹配其前面的字符至少m,至多n次

[root@localhost ~]# grep "b\{2,3\}c" test bbcabbbc

\{m\}:匹配其前面的字符m次

[root@localhost ~]# grep "b\{2\}c" test bbcabbbc

\{0,n\}:表示匹配其前面的字符至多n此

[root@localhost ~]# grep "b\{0,2\}c" test bcbbcabbbc

\{m,\}:表示匹配其前面的字符至少m次

[root@localhost ~]# grep "b\{3,\}c" test abbbc

  • 位置锚定

^:锚定每行的起始位置

[root@localhost ~]# grep "^bc" test bcbbc

$:锚定每行的结束位置

[root@localhost ~]# grep "bc$" test bcbbcabbbc

\<:锚定词首

[root@localhost ~]# grep "\<cd" test1ab.cd.ef

\>:锚定词尾 注:不包含特殊字符组成的串叫单词

[root@localhost ~]# grep "b\>" test1ab.cd.ef

\b:等同于\<或\>,在单词左边为锚定词首,反之为锚定词尾

[root@localhost ~]# grep "\bcd" test1ab.cd.ef[root@localhost ~]# grep "b\b" test1ab.cd.ef

^$:没有任何字符的空白行

[root@localhost ~]# grep "^$" test1

  • 分组,引用及或

\(\):可以将一串字符串引用起来,并可以结合次数匹配使用,也可以使用\n进行引用

[root@localhost ~]# grep "\(abc\)\{2\}" test2abcabcabc[root@localhost ~]# grep "\(a.c\).*\1" test2 #\n 表示引用第n个括号匹配到的内容,而非模式本身,所以 abczzzzzzzzzzza;c就没有被匹配到abcabcabcabczzzzzzzzzzzabca;czzzzzzzzzzza;c

\|:或者的意思

[root@localhost ~]# grep "abc\|def" test3abcefabdefabcdef[root@localhost ~]# grep "ab\(c\|d\)ef" test3#或表示其前方的字符串或后面的字符串,而非单个字符,欲匹配单个字符,可以结合\(\)使用abcefabdef

5.扩展正则表达式

关于扩展正则表达式的元字符大体上和标准正则表达式是一样的,只是在一些元字符使用时,不再需要使用\进行转义,只有在使用词首锚定(\<),词尾锚定(\>)以及分组的引用(\n)时转义,可以使模式更加简洁,可读性也会更强.同时也可以使用 + 表示匹配其前面的字符至少1次。

-----------------------------------华丽的分割线--------------------------------------

附:

上述示例使用文件内容

[root@localhost ~]# cat testbcbbcabbbc

[root@localhost ~]# cat test1ab.cd.efabcdefabde.ef

[root@localhost ~]# cat test2abcabcabcabcabczzzzzzzzzzzabca;czzzzzzzzzzza;cabczzzzzzzzzzza;c

[root@localhost ~]# cat test3abcefabdefabcdef

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • shell第九讲

    我们之前给大家讲过几个特殊变量了,比如 $0 $1 这些位置变量,还有命令执行状态判断符$?。这些在工作中都是比较常用的,初次之外,再给大家分享几个工作中偶尔会...

    小小科
  • Linux 运维必备的 13 款实用工具,拿好了~

    本文介绍几款 Linux 运维比较实用的工具,希望对 Linux 运维人员有所帮助。 1. 查看进程占用带宽情况 - Nethogs Nethogs 是一个...

    小小科
  • 【深度解析】Linux系统启动流程

    Linux系统启动流程大概总结下来是这么一个过程: POST-->BootLoader(MBR)-->Kernel(硬件探测、加载驱动、挂载根文件系统、/sbi...

    小小科
  • Linux下查看网络信息和端口信息

    1、在ifconfig内容中找出ip [root@localhost ~]# ifconfig ens33|grep "inet "\ > |awk '{pr...

    菲宇
  • megeedu Linux+Pytho

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。

    py3study
  • 什么是HDFS?算了,告诉你也不懂。

    上一篇已经讲解了「大数据入门」的相关基础概念和知识了,这篇我们来学学HDFS。如果文章有错误的地方,不妨在评论区友善指出~

    Java3y
  • 实验0 安装GLUT包与创建工程

    OpenGL是一个非常优秀的图形软件接口。OpenGL官方网站(英文)http://www.opengl.org/

    步行者08
  • Nmap之防火墙/IDS逃逸 原

    使用该选项可以将TCP头分段在几个包中(将包分为8个字节或更小),使得IDS、包过滤器以及其他工具的检测更加困难。一些主机会禁止ICMP请求,对于这种情况就可以...

    青木
  • (python小白必看!)python爬虫详细讲解:静态单网页的内容爬取 爬取对象:百度贴吧湖北大学吧

    之前发了一篇关于文件处理小实验的文章,不知道大家有没有看呢?那篇文章真的很关键,之前我本以为没有爬取成功的原因是因为我的文件处理部分出现的问题,后来经过两个小测...

    HUBU生信
  • NFS高可用(NFS+keepalive+Sersync)

    NFS这样古老的共享存储的技术,被众多小公司和没钱的公司采用,现在就我司就需要出一套客户的离线版本方案,客户们想数据安全却又不想花钱,所以我就采用了NFS做后端...

    张琳兮

扫码关注云+社区

领取腾讯云代金券