一、什么是正则表示法?
正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能;
正则表达式分为两类:基本正则表达式和扩展正则表达式;
------------------------------------------------------ 注:本文以grep为例来讲解正则表达式。
(1)基本正则表达式:
字符匹配:
| 字符: | 字符说明: | |||
| . | 匹配任意单个字符 | |||
| [] | 匹配任意单个字符 | |||
| [[:digit:]], [0-9] | 所有数字 | |||
| [[:lower:]], [a-z] | 所有小写字母 | |||
| [[:upper:]], [A-Z] | 所有大写字母 | |||
| [[:alpha:]], [a-zA-Z] | 所有字母 | |||
| [[:alnum:]], [0-9a-zA-Z] | 所有字母和数字 | |||
| [[:space:]] | 所有的空白字符 | |||
| [[:punct:]] | 所有标点符号 | |||
| [^] | 匹配指定集合外的任意单个字符 | |||
匹配次数:用于对其前面紧邻的字符所能够出现的次数作出限定
| 字符: | 字符说明: | |||
| * | 匹配其前面的字符任意次,0,1或多次 | |||
| \? | 匹配其前面的字符0次或1次 | |||
| \+ | 匹配其前面的字符出现至少1次 | |||
| \{m\} | 匹配其前面的字符m次 | |||
| \{m,n\} | 匹配其前面的字符至少m次,至多n次 | |||
| .* | 匹配任意长度的任意字符 | |||
位置锚定:
| 字符: | 字符说明: | |||
| ^ | 行首锚定 写在模式的最左侧 | |||
| $ | 行尾锚定写在模式的最右侧 | |||
| ^$ | 空白行 | |||
| \< | 词首锚定, 出现在要查找的单词模式的左侧;\<char | |||
| \> | 词尾锚定, 出现在要查找的单词模式的右侧;char\> | |||
| \<pattern\> | 匹配单词 | |||
分组:\(\) 后向引用:
模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用;\1, \2, \3模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容。
文本搜索工具:根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行。例如: grep, egrep, fgrep
grep:grep [OPTION]... ‘PATTERN‘ FILE...
--color
注:–color选项是个非常好的选项,可以让你清楚的明白匹配了那些字符。最好在自己的.bashrc或者.bash_profile文件中加入:
例如:alias grep=grep --color=auto ;( 每次grep搜索之后,自动高亮匹配效果了。)
参数说明:
| OPTION: | 选项说明: | |||
| -v | 反向选取 | |||
| -o | 仅显示匹配到内容 | |||
| -i | 忽略字符大小写 | |||
| -E | 使用扩展正则表达式 | |||
| -A # | After的意思,显示匹配字符串后#行的数据 | |||
| -B # | before的意思,显示匹配字符串前#行的数据 | |||
| -C # | 显示匹配#次数 | |||
| --color | 以特定颜色高亮显示匹配关键字 | |||
egrep及扩展的正则表达式
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。
# grep -E ‘pattern‘ file...
# egrep ‘pattern‘ file...
虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。
扩展正则表达式的元字符:
字符匹配:用法与grep用法一致;
锚定:用法与grep用法一致
匹配次数限定:
| 字符: | 字符说明: | |||
| * | 匹配其前面的字符任意次,0,1或多次 | |||
| ? | 匹配其前面字符0次或1次 | |||
| + | 匹配其前面的字符至少1次 | |||
| {m} | 匹配其前面的字符m次 | |||
| {m,n} | 匹配其前面的字符m次 | |||
| | | 或者的方式匹配字符 | |||
---------------------------------------------注:与grep用法不同的是不加\。
分组:() 支持后向引用:\1, \2, ...
或者: a|b: a或者b
fgrep
fgrep [option] ‘string‘ file...
本文出自 “小二哥Linux” 博客,请务必保留此出处http://9612520.blog.51cto.com/9602520/1579411
原文:http://9612520.blog.51cto.com/9602520/1579411