正则表达式大爆料
更新:之前由于笔者马虎所写的关于词首词尾锚定命令无法让广大看客们验证成功(将匹配范围的花括号写成了小括号),这里表示歉意,并且对fantefei 博主表示感谢。。。 对于正则表达式定义的描述笔者共找到了四种定义方式供大家参考: 马哥定义:是指一类字符所书写的模式,而这一类字符被称作正则表达式元字符,所谓元字符就是不表示本身的意思而表示通配或其他意义,也就是说用于额外功能性的描述。而这个功能性描述所书写的表达式就叫正则表达式。总结大概就是:使用一类不表示本身意义的元字符组合其他字符所描述出来的能够匹配符合模式字符的表达式就成为是正则表达式的模式。 百度定义:也就是说一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。 总结得知:正则表达式就是字符与字符间的验证描述关系。 定义说完了我们来看看正则表达式的用法: grep:Global search Regular Exmpression and Printing 简单(全局)搜索正则表达式并显示出来:主要功能为以正则表达式所表示的条件为标准 用法描述: grep[options] 'pattern' FILE grep[选项] '条件(表达式,模式)' 文件 注:从这个文件中查找符合指定模式的行并显示出来 例如:在/etc/passwd文件下显示包含了root字符串的行 正则表达式主要分为两类: 基本正则表达式(grep),扩展正则表达式(egrep) 其实另外还有一种叫做fgrep:不支持正则表达式元字符,搜索字符串的速度快 下面我们分别细细的阐述: 1、基本正则表达式(grep) 说起基本正则表达式首先要说一下元字符,什么是元字符呢?所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。 而基本正则表达式中包含一下这些元字符:
例:grep --color=auto 'a*b' grep.txt 注:这个例题的意思是匹配b前任意个a 下面是grep.txt中的文本内容:举例类型后面在不断添加。
例:grep --color=auto 'r.*h' /etc/passwd
注:有些细心的人会发现其中所圈写项中有两个r.*h项为何会默认写一段呢,原因是:linux中有个贪婪模式:尽可能长的去匹配符合模式的内容
[a-z] [A-Z] [0-9] [:lower:] 小写字母 [:upper:] 大写字母 [:digit:] 数字符号 [:alpha:] 大小写字母 [:alnum:] 数字加字母 [:space:] 空白符号 [:punct:] 标点符号 注:这些都是相当于不加中括号的字符
例:查找/etc/passwd下r后加任意单个数字符号后跟任意长度的任意字符再跟h的字段 grep "r[0-9].*h" /etc/passwd
例:grep "a?b" grep.txt
注:意思表示b前面的a字符出现一次或不出现都行
例:grep 'a{1,2}b' grep.txt
例:grep 'a{0,3}b' gret.txt
例:grep 'a{3,}b' gret.txt
例:grep 'a{3}b' gret.txt
b: bpattern 也表示锚定词首
例:grep '&;[Bb].{2,5}[Tt]' /etc/rc.d/rc.sysinit grep 'b[Bb].{2,5}[Tt]' /etc/rc.d/rc.sysinit
b: patternb 表示锚定词尾 grep '[Bb].{2,5}[Tt]&;' /etc/rc.d/rc.sysinit grep '[Bb].{2,5}[Tt]b' /etc/rc.d/rc.sysinit
grep "(ab){1,3}" grep.txt 注:上例为以ab为一个字符显示1-3次 分组中有个常用功能叫前向引用 例:grep "(a.b).*1" grep.txt 注:1为(a.b)的值再次引用输出 介绍完了基本正则表达式中元字符后我们来了解一下基本正则表达式中常见的选项: --color=auto 自动选择颜色将内容高亮显示出来 -v: 表示反向选取,只显示不符合模式的行; -o:只显示被模式匹配到的字串,而不是整个行; -A #:显示匹配到的行时,顺带显示其后面的#个行; -B #:前面的#行 -C #:前后的#行 -i:匹配时不区分大小写 -E:表示使用扩展的正则表达式(grep -E =egrep) 这里就不在举例说明了,请各位自行研究。 2,扩展正则表达式(egrep,grep -E) 常见元字符如下:
例:egrep --color=auto 'a+b' grep.txt
注:b之前至少出现一次a
例:egrep '^s|S' /proc/meminfo 注:这里的表示以s开头或者存在S的字符行 例: egrep '^(s|S)' /proc/meminfo
注:这里才表示以s或S开头的字符行(也就是需要分组)
egrep '&;r..t&;' /etc/passwd 注:这里的反斜线不可以省略
至此结束正则表达式的基础介绍与应用就完毕了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |