天天看点

Linux shell脚本——正则表达式01 正则表达式

01 正则表达式

1 字符类

. ——匹配任意一个字符,如cod.可以匹配cod1、code等

[] ——匹配括号中的任意一个字符,如[abc]d可以匹配ad、bd、cd等

- ——在[]内表示字符范围(仅在中括号内有效),如[a-z]表示所有的小写字母

^ ——位于[]括号内的开头,匹配除括号中的字符之外的任意一个字符,

2 数量限定符

? ——紧跟在它前面的单元匹配0次或1次,=0或=1

+ ——紧跟在它前面的单元匹配1次或多次,>=1

* ——紧跟在它前面的单元匹配0次或多次,>=0

{N} ——精确匹配N次,=N

{N,} ——至少匹配N次,>=N

{,M} ——最多匹配M次,<=M

{N,M} ——匹配次数介于M-N之间,>M并切<N

3 位置限定符

^ ——匹配行首的位置,匹配内容位置限定为行首

$ ——匹配行末的位置,匹配内容位置限定为行末尾

\< ——匹配单词开头的位置

\> ——匹配单词结尾的位置

\b ——匹配单词开头或结尾的位置,如\bat\b表示匹配at,其他单词均无法匹配

\B ——匹配非单词开头或结尾的位置

例如,匹配IP地址的正则表达式为

egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' test.regex 
           

egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}$' filename
           

4 Basic正则和Extended正则

Basic正则——基础正则,字符?+{}|()等符号使用时均需要增加转义字符\,使用指令grep执行

Extended正则——扩展正则,使用执行egrep,egrep指令某系系统不支持,需要切换为grep -E 来执行

如:匹配IP地址的正则表达用扩展正则的写法是:

egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}$' filename
           

用基础正则的写法是:

grep -E '^([0-9]{1,3}\.){3}[0-9]{1,3}$' filename
           

5 综合实例

(1)使用vi新建测试文档test.regex,在文档中输入随机的字符组合,如下所示:

10.44.53.130
test
aa
bb
art
test
start
end
E2
R4
A1
B1
c1
d1
y1
.5
2.3
4.5
0.5
ee.yy.tte.cc
192.168.1.108
55g.445.45.64
huawei
tencent
dji
           

(2)在命令行调用egrep指令,搜索IP地址:

$ egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}$' test.regex 
10.44.53.130
192.168.1.108
           
为实现中华民族的伟大复兴的中国梦而奋斗

继续阅读