加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

初识正则表达式

发布时间:2020-12-13 23:09:18 所属栏目:百科 来源:网络整理
导读:什么是正则表达式: 正则表达式是一类字符所书写的模式, 使用一堆字符,不表示字符原有的意义而是表示元字符用与描述功能的,用于功能性描述所书写出来的表达式称为正则表达式; 什么是表达式的模式 元字符: 元字符,不表示字符本事的意义,而用于额外功能

什么是正则表达式:

正则表达式是一类字符所书写的模式,使用一堆字符,不表示字符原有的意义而是表示元字符用与描述功能的,用于功能性描述所书写出来的表达式称为正则表达式;

什么是表达式的模式 元字符:

元字符,不表示字符本事的意义,而用于额外功能性的描述;使用一类元字符 一类不表示本身意义的元字符,组合其他字符所描述出来的 能够匹配符合条件 或者说能够匹配模式字符的表达式就称做是正则表达式的模式;

有什么功能:

匹配查找文件中所需特定格式的字符串;

分类:

基本正则表达式;扩展正则表达式。

grep:默认支持基本正则表达式
egrep:扩展正则表达式
fgrep:不支持正则表达式元字符,搜索字符串的速度快;


命令格式:

grep [options] 'patern' FILE

#:如果模式中没有元字符可以不加引号,如果出现变量必须使用双引号,出现元字符必须加引号,可以用单双引号;

元字符:

.: 匹配任意单个字符

例:查找/etc/passwd文件中以r开头中间跟了两个任意字符后面是t的字符串;

#:grep “r..t”/etc/passwd

wKiom1MoZE7jrBCOAACOMBHuLmI300.jpg


* : 匹配其前的字符任意次

例:查找/etc/passwd文件中匹配“ro*t”模式的串;

#: grep --colo "ro*t" /etc/passwd

wKiom1MoZsajMECfAADqr9cJqSM185.jpg

.*: 匹配任意长度的任意字符

例:查找/etc/passwd文件中以root开头后面跟了任意字符的串;

#:grep --colo "root.*"

wKiom1MoZ-ehJzzgAABd87heMPY804.jpg



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

例:查找/etc/passwd文件中以r开头 以t结尾,中间跟了两个任意小写字母的串;

#:grep --colo "r[a-z][a-z]t" /etc/passwd;

wKioL1MoaTDjv9x8AAB0G6G_AP8314.jpg


^ :锚定行首的符合条件的内容,用法格式^pattern;

例:查找/etc/passwd文件中以root为行首的串;

#:grep --colo "^root" /etc/passwd;

wKioL1Moag_BTyxyAABLT1RBeSI934.jpg

root为行首后面跟了任意字符的串;

#: grep --colo "^root.*" /etc/passwd;

wKioL1MoasDSLK9mAABSk8KtJLQ655.jpg


$ :锚定行尾的符合条件的内容,用法格式 pattern$

例:查找以passwd文件中halt为行尾的行;

#: grep --colo "halt$" /etc/passwd;

wKiom1Moa-PjHbQbAAA_lPwFnK0438.jpg


^$: 查找能匹配整行内容的条件,也可以匹配空白行;

查找passwd文件中以root为行首 bash为行尾 中间任意字符的行;

#: grep --colo "^root.*bash$" /etc/passwd;

wKioL1MobN6y_rkoAABFpimEjwI050.jpg


?: 匹配紧挨在其前面的字符0次或1次 (加上起到转义作用,?对bash有特殊意义)

例:查找test文件中 字符ac之间包含0或1个b的串;

#:grep --colo "ab?c" test

wKioL1MptsHgQoAHAABdkqpv_ag934.jpg


{m,n}:匹配其前面的字符至少m次至多n次

例:查找test文件中字符ac中间包含最少1最多3个b的串;

wKiom1MpuC7i5RtgAABlWkVhPTs008.jpg


{0,n}:0至N次,至多N次

ac 之间包含0-3个b的串;

wKiom1MpuRaBImPHAABqkPJzTzc504.jpg


{m,}:至少m次

ac之间至少包含2次b的串;

wKioL1MpueigbTztAABh3l6QcT4287.jpg


{m} 精确指定出现m次

ac中间包含3个b的串;

wKiom1MpuirTsxX1AABetSZ5EZk526.jpg


查找passwd文件中以大小写r开头中间跟了任意1-5个字符以大小写t结尾的串;

#: grep --colo "[rR].{1,5}[tT]" /etc/passwd

wKiom1MpuxPAYOHTAAFmsiVsopY847.jpg


&; :锚定词首

查找passwd文件中以r开头后面跟3个任意字符的串;

wKioL1MpvI6RlFZDAAEs2t9-13A821.jpg

&; : 锚定词尾

查找以t结尾前面跟了任意3个字符的串;

wKiom1MpvRnifbUAAAEs-P5opPc945.jpg

&;pattern>:精确锚定

查找以r开头以t结尾的单词;

wKioL1MpvdGDZHY_AABkNqktewM966.jpg


()1:分组,引用

wKioL1MpwcSyS0onAABXZoRBPcY003.jpg



grep的选项:

--color=auto 加颜色
-v :反向选取,只显示不符合模式的行;
-o: 只显示被匹配到的串本身;
-A # :显示匹配到的行时,顺带显示其后面的#个行(N行)
-b#:前面的N行
-c# : 后面的N行
-i:匹配时不区分大小写;

扩展选项:

-E:使用扩展的正则表达式;

+:匹配其前面的字符至少一次

a|b :二选一 或者

查找f出现最少1次的串;ff或者rr的串;

wKioL1MpxZOwxxVbAAB9odb428w056.jpg

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读