linux正则表达式

一.基本正则表达式

1.字符含义

字符含义
^行首定位符
$行尾定位符
.匹配任意单个字符
*匹配前导符0到多次
.*任意多个字符
[]匹配指定范围内的字一个字符
[-]匹配指定范围内的一个字符,连续的范围
[^]匹配不在指定组内的字符
\用来转义元字符,脱义符
()匹配稍后使用的字符的标签
x\ {m\ }字符x重复出现m次
x\ { m,\ }字符出现m次以上
x\ {m,n\ }字符出现m到n次

2.练习

1.^行首定位符

[root@DBSEC_DAS ~]# grep "root" /etc/passwd    #包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@DBSEC_DAS ~]# grep "^root" /etc/passwd    #以root开头的行
root:x:0:0:root:/root:/bin/bash

2.$行尾定位符

[root@DBSEC_DAS ~]# cat  test
abc
hello 
dbsec
[root@DBSEC_DAS ~]# grep "c$" test    #查找以c为结尾的行
abc
dbsec

3. .匹配任意单字符

[root@DBSEC_DAS ~]# grep "abc"  test
abc
[root@DBSEC_DAS ~]# grep "a.c"  test    #任意单字符
abc
acc
agc

4.匹配前导符0到多次

[root@DBSEC_DAS ~]# grep "abc*" test    #c可以是0个,可以是多个
ab
abc
abcd
abcde
[root@DBSEC_DAS ~]# grep "abcd*" test    #d可以是0个,可以是多个
abc
abcd
abcde

5. .* 任意多个字符

[root@DBSEC_DAS ~]# grep ".*"  test    #全部满足要求
ab
abc
abcd
abcde

6.匹配指定范围内的一个字符

[root@DBSEC_DAS ~]# cat  test
love
Love
iove
1ove
[root@DBSEC_DAS ~]# grep  "[1l]ove" test    #1ove和love满足要求
love
1ove

7.[-]匹配指定范围内的一个字符,连续的范围

[root@DBSEC_DAS ~]# cat test
love
Love
iove
1ove
[root@DBSEC_DAS ~]# grep "[0-9]" test    #匹配到1ove
1ove
[root@DBSEC_DAS ~]# grep "[a-z]ove" test    #匹配到love和iove
love
iove
[root@DBSEC_DAS ~]# grep "[A-Z]ove" test    #匹配到Love
Love

8.[^]匹配不在指定组内的字符

[root@DBSEC_DAS ~]# cat  test
love
Love
iove
1ove
[root@DBSEC_DAS ~]# grep "[^0-9]ove" test    #除了1ove全显示
love
Love
iove
[root@DBSEC_DAS ~]# grep "[^0-9a-z]ove" test    #除了iove、love、1ove全显示
Love
[root@DBSEC_DAS ~]# grep "[^0-9 A-Z]ove" test    #除了1ove、Love全显示
love
iove

9.\ 转义符

[root@DBSEC_DAS ~]# cat  test
love
l.ve
[root@DBSEC_DAS ~]# grep  "l." test    #匹配所有
love
l.ve
[root@DBSEC_DAS ~]# grep  "l\." test    #只匹配l.
l.ve

10.()匹配稍后使用的标签

#love
#you i love
~                                                                                                      
~       
......                                                                                                                                                                                               
~  
~                                                                                                                                                                                                
:1,2 s/\(.*\)/#\1/      #在两行内容的前面加上#符号  /A/B\1/  \1替代前面的A

11.x\{m\}字符重复出现m次

[root@DBSEC_DAS ~]# cat  test
love
loove
looove
[root@DBSEC_DAS ~]# grep "o\{3\}"  test    #匹配o出现三次
looove

12.x\{m,\}字符重复出现m次以上

[root@DBSEC_DAS ~]# cat  test
love
loove
looove
[root@DBSEC_DAS ~]# grep  "o\{2,\}" test    #字符出现两次以上
loove
looove

13.x\{m,n\}字符出现m到n次

[root@DBSEC_DAS ~]# cat test
love
loove
looove
loooove
looooove
[root@DBSEC_DAS ~]# grep "o\{3,5\}" test    #匹配o出现3-5次
looove
loooove
looooove

二.扩展正则表达式(egrep或grep -E)

1.字符含义

字符含义
+匹配1~n个前导符
匹配0~1个前导符
a|b匹配a或b
()组字符

2.练习

1.+匹配1~n个前导符

[root@DBSEC_DAS ~]# cat test
love
loove
looove
loooove
[root@DBSEC_DAS ~]# egrep "lo+ve" test    #匹配1-n个o
love
loove
looove
loooove

2.?匹配0-1个前导符

[root@DBSEC_DAS ~]# cat  test
love
loove
looove
loooove
[root@DBSEC_DAS ~]# egrep "lo?ve" test    #匹配0-1个前导符
love

3.a|b 匹配a或b

[root@DBSEC_DAS ~]# cat test
love
loove
looove
loooove
test
[root@DBSEC_DAS ~]# egrep "o|t"  test    #匹配所有带o和t的行
love
loove
looove
loooove
test

4.()组字符

[root@DBSEC_DAS ~]# cat test
Lovers
loves
lovers
[root@DBSEC_DAS ~]# egrep "love(s|rs)" test    #匹配love带s和带rs的行
loves
lovers

三.示例

1.练习

字符含义
grep love找love
/^love/以love开头
/love$/以love结尾
/l.ve/l开始,一个任意字符,ve结束
/lo*ve/l开始,零个或多个o,ve结束
/[Ll]ove/大L或者小l开头的ove
/love[a-z]/love最后一个字母小写
/love[^a-zA-Z0-9]/love最后一个(不是字母或者数字)而是符号
/.*/所有行
/^$/空行
/^ [A-Z]…$/开头一个大写,最后两个任意字符
/^ [A-Z][a-z]*3[0-5]/一个大写字母,0到多个小写字母或空格,3,最后一个是0-5的一个数字
/[a-z]*\ ./0到多个小写字母,最后一个点
/^ *[A-Z][a-z][a-z]$/0到多个空格开头,一个大写,一个小写,在一个小写结尾
/^ [A-Za-z][^,][A-Za-z]$/0到多个字母开头,非逗号。0到多个英文结尾
/<fourth>/找单词
/5{2}2{3}./5两次2三次和一个点
/^#/#开头的行
:1,$ s/([Oo]ccur)ence/\1rence/多了一个r
:1,$ s/(square) and (fair)/\2 and \1/从第一行到最后一行两个单词互换位置
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值