首页 > 其他 > 详细

正则表达式及grep,egrep异同解析

时间:2014-02-19 22:23:55      阅读:486      评论:0      收藏:0      [点我收藏+]

前言

 在我们初学Liunx时,就会遇到一拦路虎,那就是“正则表达式”。原因在于其结构的复杂性和逻辑性较强,需大量的练习才能将其掌握。故本文主要整理总结了正则表达式在grep(或egrep)中的基本用法,使大家对正则表达式有个整体的认识。

名词解释

 正则表达式:

    • 又称正规表示法、常规表示法(英语:Regular Expression,代码中简写为regex、regexp或RE);

    • 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则(即模式)的字符串;

    • 在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本;

    • 许多程序设计语言都支持利用正则表达式进行字符串操作,如Perl、Python等;

 元字符:

    • 正则表达式中具有特殊意义的专用字符(类似于C语言中的关键字),

    • 不表示字符本身的意义,而是用于额外的功能性描述  

分类

    • 根据支持的元字符数量和扩展功能,正则表达式一般可分为“基本正则表达式”和“扩展正则表达式”;

    • grep中内置“基本正则表达式”的功能,也可使用grep -E利用“扩展正则表达式”完成字符串匹配;

    • egrep中内置“扩展正则表达式”的功能;

基本正则表达式(grep)

 基本正则表达式的元字符:

  1. 字符匹配:

    1. .:任意单个字符

    2. [ ]:指定范围内的任意单个字符

      1. [a-z]:匹配单个小写字母

      2. [A-Z]:匹配单个大写字母

      3. [0-9]:匹配单个数字

      4. [[:upper:]]:匹配单个大写字母

      5. [[:lower:]]:匹配单个小写字母

      6. [[:alpha:]]:匹配单个字母(不分大小写)

      7. [[:digit:]]:匹配单个数字

      8. [[:alnum:]]:匹配单个字母或数字

      9. [[:space:]]:匹配单个空白(包括空格,tab等)

      10. [[:punct:]]:匹配单个标点符号

      11. [^]:指定范围外的任意单个字符

  2. 次数匹配:用来指定匹配其前面字符的次数

    1. *:任意次(.*匹配任意长度的任意字符)

    2. \?:0次或1次

    3. \{m\}:匹配m次

    4. \{m,n\}:匹配m~n次

    5. \{m,\}:匹配至少m次

    6. \{0,n\}:匹配至多n次

  3. 位置锚定:用于指定字符出现的位置

    1. ^:锚定行首

    2. $:锚定行尾(^$表示空白行)

    3. \<:锚定词首,也可表示为\b

    4. \>:锚定词尾,也可表示为\b

  4. 分组:

    1. \( \):如\(ab\)*xy

  5. 引用:

    1. \1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容

扩展正则表达式(egrep)

 “扩展正则表达式”较之“基本正则表达式”,元字符更加精简,不再需要反斜杠(\)转义,且增加了+,|等元字符,如下:

  1. 字符匹配:

    1. .:任意单个字符

    2. [ ]:指定范围内的任意单个字符

    3. [^]:指定范围外的任意单个字符

  2. 次数匹配:

    1. *:匹配前面的字符任意次

    2. ?:匹配0或1次

    3. +:匹配至少1次

    4. {m}:匹配m次

    5. {m,n}:匹配m~n次

    6. {m,}:匹配至少m次

    7. {0,n}:匹配至多n次

  3. 位置锚定:

    1. ^:行首

    2. $:行尾

    3. \<,\b:词首

    4. \>,\b:词尾

  4. 分组:

    1. ( ):分组

    2. |:或

实例

Question1

显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行

Answer1

grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit

Question2

显示/boot/grub/grub.conf中以至少一个空白字符开头的行

Answer2

grep "^[[:space:]]\{1,\}[^[:space:]]\{1,\}" /boot/grub/grub.conf

Question3

找出ifconfig命令结果中的1到255之间的整数

Answer3

ifconfig | egrep "\b([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b"

Question4

显示/etc/passwd中用户名和备注内容一致的行

Answer4

egrep "([[:alnum:]]+):.*:\1:" /etc/passwd


       

高级功能

补充

参考资料


本文出自 “小小忍者” 博客,请务必保留此出处http://xxrenzhe.blog.51cto.com/4036116/1360492

正则表达式及grep,egrep异同解析

原文:http://xxrenzhe.blog.51cto.com/4036116/1360492

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!