码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 的正则表达式grep、egrep

时间:2015-09-14 15:27:03      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

阅读目录

 

在运维中正则表达式对于笔者来说必须学习和掌握的,它是一个难点!首先它的元字符很多,组合的方法也是各种各样的,当然每个人学习和理解方法不一样,在其中遇到的问题也不一样,在Linux中想学习正则表达式,首先要学会的是grep以及egrep命令的使用

下面我会列出一小部分实例!

简单介绍

grep、egrep是一种文本搜索的工具,可以根据用户指定的模式对目标文本进行搜索过滤,显示出被模式匹配到的行

正则表达式分为两类:

  1. 基本正则表达式   grep、egrep
  2. 扩展正则表达式   egrep

正则表达式的一些选项及作用

  • grep及egrep的一些基本选项
选项 作用
-i 匹配时忽略字符大小写
-o 仅显示匹配到的内容
-v 取反,显示没有匹配到的行
--color 高亮显示匹配到的内容
-A 显示出匹配的行之后的下文行
-B  显示出匹配的行之前的上文行
-C  显示出匹配的行前后的行

 

基本正则表达式(grep)

  • 字符匹配:用来对文本中的字符进行匹配的元字符
. 匹配任意单个字符
[] 匹配集合内的任意单个字符
[^] 匹配集合外的任意单个字符

   † . :匹配任意单个字符

[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
  • POSIX字符集
[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

词尾锚定,出现在要查找的单词模式的最右侧

扩展的正则表达式(egrep)

  • 字符匹配
 . 匹配单个字符
[] 匹配集合中的单个字符
[^] 匹配集合之外的单个字符
  • 次数匹配
* 匹配其前面的字符任一次
? 匹配其前面字符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

 

这是扩展正则表达式所独有的元字符,表示“或者”,需要注意的是“|”符号左右两边是一个整体


 好了,常用的正则表达式的用法就总结到这里                               睡会觉去~~~

  

Linux 的正则表达式grep、egrep

标签:

原文地址:http://www.cnblogs.com/vforbox/p/4806730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!