正则表达式

正则表达式

正则表达式由一类特殊字符及文本字符所编写的模式。类似增强版的通配符
正则表达式分为2类

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

1.1 基本正则表达式

1.1.1 字符匹配

  • . 匹配任意单个字符,可以是一个汉字

  • [] 匹配指定范围内的任意单个字符

  • [^] 匹配指定范围外的任意单个字符

  • [:alnum:] 字母和数字

  • [:alpha:] 任何大小写字母

  • [:lower:] 小写字母

  • [:upper:] 大写字母

  • [:blank:] 空白字符

  • [:space:]水平和垂直的空白字符 (比[:blank:]范围广)

  • [:cntrl:] 不可打印字符(退格、删除、警铃)

  • [:digit:] 十进制数字

  • [:xdigit:] 十六进制数字

  • [:graph:] 可打印的非空白字符

  • [:print:] 可打印字符

  • [:punct:] 标点符号

[root@centos8 ~]#df |grep '/dev/sda'
/dev/sda2      104806400 2151100 102655300   3% /
/dev/sda3       52403200  398588  52004612   1% /data
/dev/sda1         999320  121872    808636  14% /boot

1.1.2 匹配次数

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

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

范例:

[root@centos8 ~]#cat test.txt 
ggle
gogle
google
gooogle
gooooooogle
[root@centos8 ~]#cat test.txt |grep 'go\?gle'#o可有可无
ggle
gogle
[root@centos8 ~]#cat test.txt |grep 'go\{2,\}gle' #o至少2次
google
gooogle
gooooooogle

范例:匹配正负数

[root@centos8 ~]#echo -1 -2 123 -123 234 |grep -o '\-\?[0-9]\+'
-1
-2
123
-123
234
[root@centos8 ~]#echo -1 -2 123 -123 234 |grep -o '\-[0-9]\+' #匹配负数
-1
-2
-123
[root@centos8 ~]#echo -1 -2 123 -123 234 |tr -s ' ' '\n'|grep -o '^[0-9]\+' #匹配正数
123
234

1.1.3 位置锚定

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

  • ^ 最左侧,首
  • $ 行尾锚定,最右侧
  • ^PATTERN$ 匹配整行
  • ^$ 空行
  • ^[[:space:]]$ 空白行
  • < \b 词首锚定
  • > \b 词尾锚定
  • <PATTERN> 匹配整个单词

注意:单词由字母,数字,下划线组成
范例:排除掉空行和#开头的行

[root@centos8 ~]#grep -v '^$' /etc/fstab |grep -v '^#'
UUID=2c9481a3-891b-48a7-b78f-6d5cda779b42 /                       xfs     defaults        0 0
UUID=99b1be82-b1e4-4f50-a094-cb8addda4565 /boot                   ext4    defaults        1 2
UUID=0d7156d8-588f-4b42-9a02-094c73581b16 /data                   xfs     defaults        0 0
UUID=61a1ee96-b3ba-4671-9e15-8bbeb5b505a1 swap                    swap    defaults        0 0
[root@centos8 ~]#grep  '^[^$#]' /etc/fstab 
UUID=2c9481a3-891b-48a7-b78f-6d5cda779b42 /                       xfs     defaults        0 0
UUID=99b1be82-b1e4-4f50-a094-cb8addda4565 /boot                   ext4    defaults        1 2
UUID=0d7156d8-588f-4b42-9a02-094c73581b16 /data                   xfs     defaults        0 0
UUID=61a1ee96-b3ba-4671-9e15-8bbeb5b505a1 swap                    swap    defaults        0 0

1.1.4 分组其他

1.1.4.1 分组

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

\(string1\(string2\)\)
\1: string\(string2\)
\2:string2

注意:后向引用前面的分组括号中的模式所匹配的字符,而非模式本身

1.1.4.2 或者

或者 \|

a\|b  a或b
C\|cat  C或cat
\(C\|c\)at  Cat或cat

范例:排除空行和#开头的行

[root@centos8 ~]#grep -v '^$\|^#' /etc/fstab 
UUID=2c9481a3-891b-48a7-b78f-6d5cda779b42 /                       xfs     defaults        0 0
UUID=99b1be82-b1e4-4f50-a094-cb8addda4565 /boot                   ext4    defaults        1 2
UUID=0d7156d8-588f-4b42-9a02-094c73581b16 /data                   xfs     defaults        0 0
UUID=61a1ee96-b3ba-4671-9e15-8bbeb5b505a1 swap                    swap    defaults        0 0

1.2 扩展正则表达式

1.2.1 字符匹配元字符

  • . 任意单个字符
  • [wang] 指定范围内的字符
  • [^wang] 不在指定范围内的字符
  • [:alnum:] 字母和数字
  • [:alpha:] 字母大小写
  • [:lower:] 小写字母
  • [:upper:] 大写字母
  • [:blank:] 空白字符(空格和制表符)
  • [:space:] 水平和垂直的空白符
  • [:cntrl:] 不可打印字符(退格,删除…)
  • [:digit:] 十进制数字
  • [:xdigit:] 十六进制数字
  • [:graph:] 可打印的非空白字符
  • [:print:] 可打印字符
  • [:punct:] 标点符号

1.2.2 次数匹配

  • * 匹配前面字符任意次
  • ? 0或1次,可有可无
  • + 至少1次
  • {n} 匹配n次
  • {m,n} 至少m次,至多n次

1.2.3 位置锚定

  • ^ 行首
  • $ 行尾
  • \< ,\b 语首
  • \> , \b 语尾

1.2.3 分组其他

()分组
后向引用 \1,\2,…
| 或者
a|b a或b
C|cat C或cat
(C|c)at Cat或cat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值