标签:
阅读目录
在运维中正则表达式对于笔者来说必须学习和掌握的,它是一个难点!首先它的元字符很多,组合的方法也是各种各样的,当然每个人学习和理解方法不一样,在其中遇到的问题也不一样,在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