正则表达式RE

需要注意的是 在正则表达式中 grep 只支持普通正则字符,如果需要用到拓展字符则需要用到 grep - E 或者 egrep

1.正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。
2.在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式,它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,#元字符是最重要的概念。
 
#正则表达式分为:
正则表达式基本元字符 
正则表达式拓展元字符

元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

No.1 正则表达式基本元字符

基本正则表达式元字符 
元字符
示例                      功能                       示例
^                       行首定位符                  ^love 
$                       行尾定位符                  love$ 
.                       匹配单个字符                 l..e  
*                       匹配前导符0到多次            ab*love 
.*                      匹配任意多个字符(贪婪匹配)
[]                      匹配方括号中任意一个字符      [lL]ove
[ - ]                   匹配指定范围内的一个字符      [a-z0-9]ove             
[^]                     匹配不在指定组里的字符        [^a-z0-9]ove
\                       用来转义元字符               love\.
\<                      词首定位符                  \<love
\>                      词尾定位符                  love\>
\(\)                    匹配后的标签

No.2正则表达式拓展元字符

扩展正则表达式元字符             功能                  示例
+                       匹配一次或多次前导字符        [a-z]+ove
?                       匹配零次或一次前导字符        lo?ve
a|b                     匹配a或b                   love|hate
x{m}                    字符x重复m次               o{5}
x{m,}                   字符x重复至少m次            o{5,}
x{m,n}                  字符x重复m到n次             o{5,10}
()                        字符组                        ov+ (ov)+

扩展内容:    了解即可
自带的特殊字符正则表达式
1) [[:alpha:]]   匹配任何字母,无论大小写
2) [[:alnum:]]  匹配任何字母,无论大小写,还匹配数字0~9
3)   [[:blank:]]    匹配空格和制表符
4)   [[:digit:]]      匹配数字0~9
5)   [[:upper:]]    匹配大写字母
6)   [[:lower:]]     匹配小写字母
7) [[:punct:]]    匹配标点符号
8) [[:print:]]      匹配可打印字符

\w 匹配字母或数字或下划线或汉字 等价于 '[A-Za-z0-9_]'。(能不能匹配汉字要视你的操作系统和你的应用环境而定)

\s 匹配任意的空白符  (包含水平制表符)

\d 匹配数字

\b 匹配单词的开始或结束


shell 编程-grep

[root@localhost ~]# grep   '^#'    /etc/ssh/ssh_config       #过滤以#号开头的行
[root@localhost ~]# grep    -v  '^#'     /etc/ssh/ssh_config         #-v:取反,表示反向查找
[root@localhost ~]# grep     -i   'sendenv'     /etc/ssh/ssh_config          #-i忽略大小写
[root@localhost ~]# grep    'bash'       /opt/test/               #过滤某个目录下面带有bash的行
[root@localhost ~]# grep       -r        'bash'     /opt/test/                 #-[r|R]表示递归查询

grep正则过滤

#grep基本正则匹配

\< 词首定位符号 \>词尾定位符号 

   以什么开头

[root@linux-server ~]# grep       '^root'          /etc/passwd

  以什么结尾

[root@linux-server ~]# grep      'bash$'           /etc/passwd

  匹配单个字符
[root@linux-server ~]# grep     'r..t'              /etc/passwd 

.*     任意多个字符
[root@linux-server ~]# grep             'r.*t'               /etc/passwd 

[ ]   匹配方括号中的任意一个字符

[root@linux-server ~]# grep         '[Rr]oot'              /etc/passwd 

[ - ]   匹配指定范围内的一个字符
[root@linux-server ~]# grep            [a-z]oot           /etc/passwd  #a-z

[^]   匹配不在指定组内的字符,非得意思

#注意:^在[  ]内表示取反,^在[  ]外表示以什么开头
[root@linux-server ~]# grep              '[^0-9]'             /etc/passwd 

[root@linux-server ~]# grep            '[^0-9A-Z]oot'              /etc/passwd 

\(\)匹配后的标签

[root@linux-server ~]# cat file1.txt 
IPADDR=192.168.1.123 
GATEWAY=192.168.1.1 
NETMASK=255.255.255.0 
DNS=114.114.114.114
:%s/\(192.168.1.\)123/\12/
:%s/\(192.\)\(168.\)\(1.\)12/\1\2\35/

#扩展正则匹配---egrep

扩展正则表达式元字符             功能                  示例
+                       匹配一次或多次前导字符        [a-z]+ove
?                       匹配零次或一次前导字符        lo?ve
a|b                     匹配a或b                               love|hate
x{m}                    字符x重复m次                      o{5}
x{m,}                   字符x重复至少m次             o{5,}
x{m,n}                  字符x重复m到n次              o{5,10}
()                         字符组                                ov+ (ov)+

egrep 支持正则表达式的拓展元字符
[root@linux-server ~]# egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/resolv.conf 

+ 匹配一个或多个前导字符
[root@linux-server ~]# egrep          'ro+t'       /etc/passwd 

a|b    匹配a或b
[root@linux-server ~]# netstat -anlp|egrep ':80|:22'
[root@linux-server ~]# egrep         'root|jack'               /etc/passwd

x{m} 字符x重复m次 
[root@linux-server ~]# cat a.txt
love
love.
loove
looooove 
[root@linux-server ~]# egrep         'o{2}'      a.txt
loove
looooove 
[root@linux-server ~]# egrep        'o{2,}'       a.txt
loove
looooove 
[root@linux-server ~]# egrep       'o{6,7}'      a.txt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值