linux正则表达式

2 篇文章 0 订阅

定义

正则表达式是用户所定义的模式模板(pattern template),linux工具可以用它来过滤文本。并且能够在处理数据试使用正则表达式对数据进行模式匹配。如下图:数据流匹配过程

在这里插入图片描述

  • linux中常用正则表达式类型
  1. POSIX基本正则表达式(basic regular expression)引擎
  2. POSIX扩展正则表达式(extended regular expression)引擎

大多数linux工具都至少符合POSIX BRE引擎规范,能够识别该规范定义的所有模式符号。POSIX BRE引擎通常出现在依赖正则表达式进行文本过滤的编辑中。

基本正则表达式

字符匹配

字符含义
.匹配任意单个字符
[]匹配指定范围内的任意单个字符
[^]匹配指定范围外的任意单个字符
[:alnum:]字母和数字
[:alpha:]代表任意小写字符
[:lower:]小写字母
[:upper:]大写字母
[:blank:]空白字符(空格和制表符)
[:space:]水平和垂直的空白字符 (比[:blank:]包含的范围广)
[:cntrl:]不可打印的控制字符(退格、删除、警铃……)
[:digit:]十进制数
[:xdigit:]十六进制数
[:graph:]可打印的非空白字符
[:print:]可打印字符
[:punct:]标点符号

匹配次数

匹配次数:用于要指定次数字符的后面,指定前面的字符要出现的次数

符号含义
*匹配前面的字符任意次,包括0次
?匹配前面的字符0或1次
+匹配前面的字符至少1次
{n}匹配前面的字符n次
{n,m}匹配前面的字符至少n次,至多m次
{,n}匹配前面的字符至多n次
{n,}匹配前面的字符至少n次

位置锚定

指定字符出现的位置

符号含义
^行首锚定,用于模式的最左侧
$行尾锚定,用于模式的最右侧
\<或\b词首锚定,用于单词模式的最左侧
\>或\b词尾锚定,用于单词模式的最右侧

分组

分组:()将一个或多个字符捆绑在一起,当作一个整体处理,如;(root)+。分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量命名的方式为:\1,\2,\3……,\1表示从左侧起第一个括号以及与之匹配右括号之间的模式所匹配到的字符。
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身

示例1
\(str1\(str2\)\)
\1:str1\(str2\)
\2:str2
示例2 \|或
a\|b	a或b
H\|han	H或han
\(H\|h\)an	Han或han

常用组合

字符含义
.*任意长度的任意字符
^$空行
^[[:space:]]*$空白行
^#文件中的注释行
[0-9]数字0-9

扩展正则表达式

扩展正则表达式使用需要工具支持,书写更简洁,大多数不需要添加“\”。

字符含义
.任意单个字符
[]指定范围的字符
[^]排除指定范围的字符
*匹配前面字符任意次
?匹配前面字符0或1次
{m}匹配前面字符m次
<,\b词首
>,\b词尾
()分组
(H|h)an或者,Han或han

最佳实践

位置锚定

[root@k8s-master ~]# cat test 
name
hostname
[root@k8s-master ~]# egrep "\<name\>" test
name
[root@k8s-master ~]# 

字符重复次数

以下方式只能过滤出,包含x:9且为后面包含两位数字的结果

[root@console ~]# cat /etc/passwd |egrep  "x:9[[0-9]]?[[0-9]]?"
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
chrony:x:993:988::/var/lib/chrony:/sbin/nologin
unbound:x:992:987:Unbound DNS resolver:/etc/unbound:/sbin/nologin
geoclue:x:991:985:User for geoclue:/var/lib/geoclue:/sbin/nologin
gluster:x:990:984:GlusterFS daemons:/run/gluster:/sbin/nologin
gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
[root@console ~]# 

以下方式可以过滤出,包含x:1后面为0或1或2或两位数字的结果

[root@console ~]# cat /etc/passwd |egrep  "x:1[[:digit:]{,2}*"
bin:x:1:1:bin:/bin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
[root@console ~]# 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩华盛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值