05-正则表达式

1 字符匹配
.   匹配任意单个字符(除了\n),可以是一个汉字或其它国家的文字
[]   匹配指定范围内的任意单个字符,示例:[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:] 标点符号
-----------------
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\r\t\v]。注意 Unicode 正
则表达式会匹配全角空格符
\S     #匹配任何非空白字符。等价于 [^\f\r\t\v]
\w #匹配一个字母,数字,下划线,汉字,其它国家文字的字符,等价于[_[:alnum:]字]
\W #匹配一个非字母,数字,下划线,汉字,其它国家文字的字符,等价于[^_[:alnum:]字]
[root@rocky ~]# cat /etc/passwd |grep r..t    ..两字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
clevis:x:995:989:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
[root@rocky ~]# echo "a" |grep '[chuan]'   范围内
a
[root@rocky ~]# echo "w" |grep '[chuan]'
[root@rocky ~]# echo "c" |grep '[^chuan]'   范围外
[root@rocky ~]# echo "h" |grep '[^chuan]'
[root@rocky ~]# echo "u" |grep '[^chuan]'
[root@rocky ~]# echo "a" |grep '[^chuan]'
[root@rocky ~]# echo "n" |grep '[^chuan]'
[root@rocky ~]# echo "w" |grep '[^chuan]'
w
touch f{a..z}.txt
touch f{A..Z}.txt
[root@rocky data]# ls f[[:lower:]].txt  小写
[root@rocky data]# ls f[[:upper:]].txt  大写
[root@rocky data]# ls | grep  "f[[:upper:]].txt"
[root@rocky data]# ls f[a-z].txt  通配符含大写
fa.txt  fB.txt
2,匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\}  #匹配前面的字符至多n次,<=n
\{n,\}  #匹配前面的字符至少n次

 

[root@rocky data]# echo rt | grep ro*t
rt
[root@rocky data]# echo roooooooooooooooooooot | grep ro*t
roooooooooooooooooooot

 

[root@rocky data]# grep ".*t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@rocky data]# ls |grep "f.*".txt

\? 0次或N次

[root@rocky data]# echo xa |grep "xa\?"
xa
[root@rocky data]# echo x |grep "xa\?"
x
[root@rocky data]# echo xxaa |grep "xa\?"   #a可有可无
xxa

\+ 一次以上满足,至少一次

[root@rocky data]# echo gogle |grep "go\+gle"
gogle

\{\n}   必须5次才满足

[root@rocky data]# echo gooooogle |grep "go\{5\}gle"
gooooogle
[root@rocky data]# echo gooooogle |grep "go\{4\}gle"
[root@rocky data]#

5次一下

[root@rocky data]# echo ggle |grep "go\{,5\}gle"
ggle

                                                                                                                   0-9 一到三次 \.  不是正则表达式的.

[root@rocky data]# ifconfig ens33 | grep netmask |grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
192.168.80.171
255.255.255.0
192.168.80.255
[root@rocky data]# ifconfig ens33 | grep netmask |grep -o -m1 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' |head -n1
192.168.80.171
[root@rocky data]# echo 999.999.999.999 |grep -o -m1 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 
999.999.999.999
[root@rocky data]# echo 1999.999.999.99911 |grep -o -m1 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 
999.999.999.999

 

位置锚定
位置锚定可以用于定位出现的位置
^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行
^$ #空行
^[[:space:]]*$ #空白行
\< 或 \b   #词首锚定,用于单词模式的左侧
\> 或 \b        #词尾锚定,用于单词模式的右侧
\<PATTERN\>     #匹配整个单词
#注意: 单词是由字母,数字,下划线组成

位置

IP地址 正则表示

^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

   [0-9] 表示数字0至9之间的任意一个数字   ?表示0次或一次 | 或 ()整体 \. 无特殊含义  ()整体   {3} 三次  ^$ 位置锚定

[root@rocky data]# IP=0.0.0.0
[root@rocky data]# [[ $IP =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] ;echo $?
0
[root@rocky data]# IP=0.0.0.888
[root@rocky data]# [[ $IP =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] ;echo $?
1

 

[root@rocky data]# echo 999.999.999.999 |grep -o -m1 '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$' 
999.999.999.999
[root@rocky data]# echo 0.0.0.0 |grep -o -m1 '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$' 
0.0.0.0
[root@rocky data]# echo gexuchuan |grep "\<gexuchua\>"
[root@rocky data]# 
[root@rocky data]# echo gexuchuan |grep "\<gexuchuan\>"
gexuchuan

 

() 分组
后向引用:\1, \2, ... 注意: \0 表示正则表达式匹配的所有字符
| 或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat
 
[root@rocky data]# echo abcabcabc |grep "\(abc\)\{3\}"
abcabcabc
[root@rocky data]# echo abc123xyzaaaabc |grep '\(abc\)\(123\)\(xyz\).*\1'
abc123xyzaaaabc
[root@rocky data]# echo abc123xyzaaaabcxyz |grep '\(abc\)\(123\)\(xyz\).*\3'    #后续引用
abc123xyzaaaabcxyz

 

  

posted @ 2022-04-04 14:04  gg888666  阅读(47)  评论(0编辑  收藏  举报