首页 > 代码库 > Linux之正则表达式
Linux之正则表达式
既然讲到的正则表达式,那么什么是正则表达式呢?
正则表达式是一类“字符”所书写的表达模式,其中许多字符不表示其自身字面的意思,而是表达为控制或通配等
元字符:指正则表达式里的特殊字符,不表示其字面意思,而用于额外功能性描述
正则表达式提供强大的字符串处理能力,根据grep,egrep,fgrep文本搜索工具,对目标文件进行逐行搜索,并显示其结果。
正则表达式分为:
基本正则表达式:grep支持
扩展正则表达式:egrep,grep–E支持
fgrep:fast不支持使用正则表达式
grep命令的语法:
grep [OPTION]··· ‘PATTERN’ FILE
——color=auto(默认是红色)
基本正则表达式的元字符匹配:grep
.:在当前位置匹配单个任意字符
[]:在中括号内匹配指定范围内的任意“单个”字符
[0-9]=[[:digit:]]à数字
[a-z]=[[:lower:]]à小写字母
[A-Z]=[[:upper:]]à大写字母
[[:space:]]à空白字符
[[:punct:]]à特殊字符
[[:alpha:]]à字母
[[:alnum:]]à字母和数字
[^]:取反
举例对上边命令说明:
大家可以看到被匹配出来的字符是红色的,这又是如何实现的呢?
方式一:可以再grep --color=auto ‘pattern’ file
方式二:alias grep=’grep --color=auto’定义别名
次数匹配元字符:用于实现指定元字符“前边”的字符所能够出现的次数
*:任意长度,它前边的字符可以出现任意次
例如:a*b 那么它能匹配ab或aab或aa···b或b(a出现了0次)
\?:它前边的字符出现0次或1次
\{m\}:它前边的字符要出现m次
例如:a\{2\}b 那么它能匹配为aab
\{m,n\}:至少出现m次,至多出现n次
例如:a\{2,3\}b 那么它能匹配为aab或aaab
\{m,\}:至少出现m次,多则不限
\{0,n\}:最多出现n次
次数匹配默认情况下工作于贪婪模式,尽可能多的匹配字符
.*:代表任意字符任意长度
位置锚定:就是制定匹配字符的位置
^:表示行首锚定,字符必须出现在行首,^写在匹配字符的左侧
这么多as只匹配出了行首为as的行
$:表示行尾锚定,$字符写在字符右侧
同样是test.txt的文件内容,但只匹配出了行尾有sd的行
^$:空白行(行首行尾中间没有字符,为空白行)
单词锚定:就是不包含特殊字符的连续字符组成的字符串叫单词
\<:锚定词首,\<出现于单词的左侧
\>:锚定词尾,\>出现于单词的右侧
\b:锚定词首词尾都可以,放在单词左侧则锚定词首,放在单词右侧则锚定词尾
分组:
\(\):表示分组,\表示转义。
第一个命令是匹配ss出现一次
第二个命令是匹配s出现两次
第三个命令式匹配s没有规定出现几次
引用括号分组是有次序的,括号的引用是自左而后的左括号,以及与其对应的右括号
引用是外边的括号引用内部括号的值
\#:引用第n个括号所匹配到的内容,而非模式本身
abc引用mm后为abcmm,最后再引用一遍abcmm,匹配出来的应该 是abcmm.*abcmm
grep命令的选项:
-v:反向选取,显示没有匹配上的字符的行
-o:仅显示匹配的字符串,而非匹配到的字符串行
-i:ignore-case,忽略大小写
-E:支持使用扩展正则表达式
-A #:显示匹配行及后的#行
-B #:显示匹配行及前的#行
-C #:显示匹配行及前后的#行
扩展正则表达式:egrep/grep -E
元字符匹配:
.:匹配单个任意字符
[]:匹配指定范围的任意字符
[^]:取反
次数匹配:用于实现指定元字符“前边”的字符所能够出现的次数
*:任意长度,它前边的字符可以出现任意次
例如:a*b 那么它能匹配ab或aab或aa···b或b(a出现了0次)
?:它前边的字符出现0次或1次
+:它前边的字符至少出现一次,等同于{1,}
{m}:它前边的字符要出现m次
例如:a{2}b 那么它能匹配为aab
{m,n}:至少出现m次,至多出现n次
例如:a{2,3}b 那么它能匹配为aab或aaab
{m,}:至少出现m次,多则不限
{0,n}:最多出现n次
位置锚定:就是制定匹配字符的位置
^:表示行首锚定,字符必须出现在行首,^写在匹配字符的左侧
$:表示行尾锚定,$字符写在字符右侧
\<,\b:锚定词首,\<,\b出现于单词的左侧
\>,\b:锚定词尾,\>,\b出现于单词的右侧
^$ = ^[[:space:]]*$ : 空白行
分组:
():表示分组,\表示转义,\(\)则代表的是括号
或者: |
或者符号“|”将|前后分为两部分
例如:con|cat 代表con或cat
Co(n|c)at 代表conat或cocat
本文出自 “aolens·程超” 博客,请务必保留此出处http://aolens.blog.51cto.com/7021142/1435077