常用命令 - 正则表达式

正则表达式

正则表达式(Regular EXPression,REGEXP),被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等

正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块,如:PCRE(Perl Compatible Regular
Expressions),默认正则表达式是贪婪模式匹配,尽可能长匹配

正则表达式的元字符分类:字符匹配、匹配次数、位置锚定、分组

字符匹配

.   	匹配任意单个字符
[]   	匹配指定范围内的任意单个字符,示例:[wang]   [0-9]   [a-z]   [a-zA-Z]
[^] 	匹配指定范围外的任意单个字符,示例:[^wang] 
[:alnum:] 	字母和数字
[:alpha:] 	代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 	小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 	大写字母
[:blank:] 	空白字符(空格和制表符)
[:space:] 	水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 	不可打印的控制字符(退格、删除、警铃...)
[:digit:] 	十进制数字
[:xdigit:]	十六进制数字
[:graph:] 	可打印的非空白字符
[:print:] 	可打印字符
[:punct:] 	标点符号

范例

#匹配/etc/中以rc开头,后接0个或一个数字的文件或目录文件
[root@centos8 ~]#ls /etc/ | grep "rc[.0-9]"
[root@centos8 ~]#ls /etc/ | grep "rc[.0-9]"
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local

#匹配/etc/中以rc开头,后以.d结尾,中间是. 或数字的文件或目录文件
[root@centos8 ~]#ls /etc/ | grep "rc[.0-9].d"
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数。

* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次,即:可有可无
\+ 匹配其前面的字符至少1次,即:肯定有
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次

ps:扩展正则表达式中,不需要转义符\ ,如\? 在扩展表达式中,是?

范例

[root@centos8 ~]#cat google.txt 
ggle
gogle
google
goooooooooooogle
gooOOOOgle
goooogle

[root@centos8 ~]#cat google.txt | grep "go\?"

?d的演示

[root@centos8 ~]#cat google.txt | grep "go\+"

+ 的演示

位置锚定

位置锚定可以用于定位出现的位置

^ 			行首锚定,用于模式的最左侧
$ 			行尾锚定,用于模式的最右侧
^PATTERN$ 	用于模式匹配整行
^$ 			空行
^[[:space:]]*$	 空白行
\< 或 \b 		词首锚定,用于单词模式的左侧
\> 或 \b 		词尾锚定,用于单词模式的右侧
\<PATTERN\> 	 匹配整个单词

#ps:
#1.PATTERN是模式匹配
#2.单词是由字母,数字,下划线组成

范例

[root@centos8 ~]#cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sun Aug  2 09:55:22 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=821ca9f0-c339-4d0a-9258-806b87fe9e5d /              xfs     defaults        0 0
UUID=75cbd81a-7230-4f4a-a2d7-7119754f7f7e /boot          ext4    defaults        1 2
UUID=ab7a6930-42ca-4dcb-8f8e-cffda571867c /data          xfs     defaults        0 0
UUID=fbfef6d8-5c65-489f-bc7e-cb5d2055c9aa swap           swap    defaults        0 0

#获取/etc/fstab 中不以# 开头的内容
[root@centos8 ~]#grep '^[^#]' /etc/fstab 
UUID=821ca9f0-c339-4d0a-9258-806b87fe9e5d /              xfs     defaults        0 0
UUID=75cbd81a-7230-4f4a-a2d7-7119754f7f7e /boot          ext4    defaults        1 2
UUID=ab7a6930-42ca-4dcb-8f8e-cffda571867c /data          xfs     defaults        0 0
UUID=fbfef6d8-5c65-489f-bc7e-cb5d2055c9aa swap           swap    defaults        0 0

#查看/etc/profile 共有多少行内容
[root@centos8 ~]#wc -l /etc/profile
85 /etc/profile

#获取/etc/profile中除空行以外有多少行
[root@centos8 ~]#grep -v '^$' /etc/profile | wc -l
73

#获取/etc/profile中除#开头,空行外有多少行
[root@centos8 ~]#grep '^[^$#]' /etc/profile |wc -l
61

分组其他

分组:() 将一个或多个字符捆绑在一起,当作一个整体处理,如:\(root\)+

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

范例

执行前
在这里插入图片描述

#将l..e这种格式(如like,love)后追加r 
%s@\(l..e\)@\1r@g

执行后
在这里插入图片描述

#将l..e这种格式(如like,love)替换成1r
%s#\(l..e\)#1r#g

执行后

在这里插入图片描述
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身

或的关系 用 | 表示

a|b			a或b
C|cat		C或cat
(C|c)at		Cat或cat
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值