Shell常用正则表达式


0,常用正则匹配规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
^                      # 行首定位
$ # 行尾定位
. # 匹配除换行符以外的任意字符
* # 匹配0或多个重复字符
+ # 匹配一次或多次
? # 匹配零次或一次
[] # 匹配一组中任意一个字符
[-] # 匹配字符段中的一个,如[0-9]|[a-Z]
[^] # 匹配不在指定组内的字符
\ # 用来转义元字符
\< # 词首定位符(支持vi和grep)
\> # 词尾定位符(支持vi和grep)
\{n\} # 重复出现n次
\{n,\} # 重复出现至少n次
\{n,m\} # 重复出现至少n次不超过m次
\(\) # 括号内的字符为一组
\(ab|cd\)\+ # 匹配出现次数至少一次的ab或者de的字符串
[[:alpha:]] # 代表所有字母不论大小写
[[:lower:]] # 表示小写字母
[[:upper:]] # 表示大写字母
[[:digit:]] # 表示数字字符

1,通过实验来一个一个讲解以上规则的使用

2.1 “^”
匹配所有包含root的行
Snipaste_2019-11-29_16-35-52.png
匹配以root开头的行
Snipaste_2019-11-29_16-36-06.png
2.2 “$”
匹配所有包含sh的行
Snipaste_2019-11-29_16-37-28.png
匹配以sh结尾的行
Snipaste_2019-11-29_16-37-41.png
2.3 “.”
匹配任意4个结尾是”:”字符的行
Snipaste_2019-11-29_16-38-32.png
匹配行首任意4个带”:”字符的行
Snipaste_2019-11-29_16-40-09.png
2.4 “*“
匹配0或多个b后面带in字符的行,可以看到下面可以没有b只有in也会被匹配
Snipaste_2019-11-29_16-42-06.png
2.5 “+”
匹配一个或多个带数字9的行
Snipaste_2019-11-29_16-45-27.png
用grep扩展正则的方式执行,不需要加转义符”"
Snipaste_2019-11-29_16-46-34.png
2.6 “?”
匹配0次或1次o字符
Snipaste_2019-11-29_16-49-19.png
2.7 “[]”
匹配包含v|a|r字符的行
Snipaste_2019-11-29_16-52-32.png
匹配所有包含数字的行
Snipaste_2019-11-29_16-54-56.png
匹配所有非0-9的字符
Snipaste_2019-11-29_16-56-39.png
2.8 “< >“
匹配以r为词首的行
Snipaste_2019-11-29_17-08-19.png
匹配以t为词尾的行
Snipaste_2019-11-29_17-08-50.png
匹配以r为词首t为词尾的行
Snipaste_2019-11-29_17-10-18.png
2.9 “{ }“
匹配连续出现2个o的行
Snipaste_2019-11-29_17-12-31.png
下面使用grep扩展正则的方式来执行,以达到节省转义符和保护视力的目的
Snipaste_2019-11-29_17-13-46.png
匹配至少出现2次”:”的行
Snipaste_2019-11-29_17-18-25.png
匹配出现2次以上3次一下带”o”的行
Snipaste_2019-11-29_17-18-58.png
2.10 “( )“
匹配包含990或993的行
Snipaste_2019-11-29_18-05-30.png
进行分组替换操作,第一个括号的内容可以用”\1”表示,第二个用”\2”表示,以此类推,最多为9个.
Snipaste_2019-11-29_18-29-06.png
为了更容易理解,将\1 和 \2变换一下位置
Snipaste_2019-11-29_18-31-04.png
2.12 “[[:alpha:]] [[:lower:]] [[:upper:]] [[:digit:]]”
[[:alpha:]]匹配所有的字母,大小写都有
Snipaste_2019-11-29_18-35-25.png
[[:lower:]]匹配所有的小写字母
Snipaste_2019-11-29_18-36-01.png
[[:upper:]]匹配所有大写字母
Snipaste_2019-11-29_18-37-04.png
[[:digit:]]匹配所有数字
Snipaste_2019-11-29_18-37-43.png