标签:
阅读目录
在运维中正则表达式对于笔者来说必须学习和掌握的,它是一个难点!首先它的元字符很多,组合的方法也是各种各样的,当然每个人学习和理解方法不一样,在其中遇到的问题也不一样,在Linux中想学习正则表达式,首先要学会的是grep以及egrep命令的使用
下面我会列出一小部分实例!
grep、egrep是一种文本搜索的工具,可以根据用户指定的模式对目标文本进行搜索过滤,显示出被模式匹配到的行
正则表达式分为两类:
- 基本正则表达式 grep、egrep
- 扩展正则表达式 egrep
| 选项 | 作用 |
| -i | 匹配时忽略字符大小写 |
| -o | 仅显示匹配到的内容 |
| -v | 取反,显示没有匹配到的行 |
| --color | 高亮显示匹配到的内容 |
| -A | 显示出匹配的行之后的下文行 |
| -B | 显示出匹配的行之前的上文行 |
| -C | 显示出匹配的行前后的行 |
| . | 匹配任意单个字符 | |
| [] | 匹配集合内的任意单个字符 | |
| [^] | 匹配集合外的任意单个字符 | |
† . :匹配任意单个字符
[root@test test]# cat test.txt abbc aabbbc abc acb abb [root@test test]# grep ‘a.b‘ test.txt //搜索test.txt中含有“ab中间有一个任意字符”的行 abbc aabbbc acb abb
† [ ]:匹配指定集合中的任意单个字符
[root@test test]# cat test.txt abbc123 aabbbc343 abc acb4 abb [root@test test]# grep ‘[0-9]‘ test.txt abbc123 aabbbc343 acb4
† [^]:匹配集合外的任意单个字符
[root@test test]# cat test.txt abbc123 aabbbc343 abc acb4 abb [root@test test]# grep ‘[^a-z ]‘ test.txt abbc123 aabbbc343 acb4
| [0-9],[[:digit:]] | 集合内的任意单个数字 |
| [a-z],[[:lower:]] | 集合内的任意单个小写字母 |
| [A-Z],[[:upper:]] | 集合内的任意单个大写字母 |
| [a-zA-Z],[[:alpha:]] | 集合内的任意单个字母 |
| [[:space:]] | 单个空白字符 |
| [a-zA-Z0-9],[[:alnum:]]] | 集合内的任意单个字母数字 |
| [[:punct:]] | 集合内的任意单个特殊字符 |
† [[:digit:]], [0-9]:匹配单个数字
[root@test test]# cat test.txt abbc123 aabbbc343 abc acb4 abb [root@test test]# grep ‘[[:digit:]]‘ test.txt abbc123 aabbbc343 acb4
† [[:lower:]], [a-z]:匹配单个小写字母
[root@test test]# cat test.txt Abc XYZ WEB Db12 aZc abcc [root@test test]# grep ‘[[:lower:]]‘ test.txt Abc Db12 aZc abcc
† [[:upper:]], [A-Z]:匹配单个大写字母
[root@test test]# cat test.txt Abc Xyz web Db12 aZc abcc [root@test test]# grep ‘[[:upper:]]‘ test.txt Abc Xyz Db12 aZc
† [[:alpha:]], [a-zA-Z]:匹配单个字母
[root@test test]# cat test.txt 123 14a Ab1 34325 abc8 [root@test test]# grep ‘[[:alpha:]]‘ test.txt 14a Ab1 abc8
† [[:alnum:]], [0-9a-zA-Z]:匹配单个数字字母,两个都可以实现这个功能
[root@test test]# cat test.txt 123 14a Ab1 34325 abc8 [root@test test]# grep ‘[[:alnum:]]‘ test.txt 123 14a Ab1 34325 abc8
† [[:space:]]:匹配单个空格
[root@test test]# cat test.txt 123 14a aad Ab1 34325 abc8 131 [root@test test]# grep ‘[[:space:]]‘ test.txt 14a aad abc8 131
† [[:punct:]]:即标点符号
[root@test test]# cat test.txt 123 14a,ta Ab1 adf@Abc [root@test test]# grep ‘[[:punct:]]‘ test.txt 14a,ta adf@Abc
† [^]:匹配指定集合外的任意单个字符,匹配任意非数字字母的字符
[root@test test]# cat test.txt abc 14a,ta Ab1 aaa adf@Abc [root@test test]# grep ‘[^[:alnum:]]‘ test.txt 14a,ta Ab1 aaa adf@Abc
| * | 匹配其前面的字符任一次,即表示0次、1次或多次 |
| \? | 匹配其前面的字符0次或者一次 |
| \+ | 匹配其前面的字符出现至少1次 |
| \{m\} | 匹配其前面的字符m次,这是准确到多少次的 |
| \{m,n\} | 匹配其前面的字符至少m次,至多n次 |
| ^ | 行首锚定,出现在模式的最左侧 |
| $ | 行尾锚定,出现在模式的最右侧 |
| \<或者\b | 词首锚定,出现在要查找的单词模式的最左侧 |
| \>或者\b |
词尾锚定,出现在要查找的单词模式的最右侧 |
| . | 匹配单个字符 |
| [] | 匹配集合中的单个字符 |
| [^] | 匹配集合之外的单个字符 |
| * | 匹配其前面的字符任一次 |
| ? | 匹配其前面字符0次或1次 |
| + | 匹配其前面的字符至少1次 |
| {m} | 匹配其前面的字符m次 |
| {m,n} | 匹配其前面的字符m-n次 |
| {m,} | 匹配其前面的字符至少m次 |
| {0,n} | 匹配其前面的字符0-n次 |
扩展正则表达式只是将正则表达式的\号去掉了而已,其他的用法都是一样的,\在模式中起到了一个转译的作用,而在扩展正则表达式中则默认转译了,不需要在加转译符号
| ^ | 行首锚定 |
| $ | 行尾锚定 |
| \<或者\b | 词首锚定 |
| \>或者\b | 词尾锚定 |
扩展正则表达式的位置锚定也是和正则表达式一样的,这里的\不能省略
():同样不需要转译符\,也和正则表达式一样支持后向引用\1,\2\3
或者:
a|b: a或者b
ab|cd:ab或者cd
这是扩展正则表达式所独有的元字符,表示“或者”,需要注意的是“|”符号左右两边是一个整体
好了,常用的正则表达式的用法就总结到这里 睡会觉去~~~
标签:
原文地址:http://www.cnblogs.com/vforbox/p/4806730.html