linux学习 5 正则表达式及通配符

发布于:2025-04-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

重心应该放在通配符的使用上

正则表达式

正则表达式是用于 文本匹配和替换 的强大工具

介绍两个交互式的网站来学习正则表达式
regexlearn 支持中文

regexone
还有一个在线测试的网址
regex101

基本规则

符号 作用 示例
. 匹配任何字符除了换行 a.b -> axb/a,b
[abc] 匹配字符集里面的任何一个内容 b[aei]d -> bad/bed/bid
[^abc] 否定字符集,匹配除了字符集之外的字符 b[abc]d -> bad b[^abc]d ↛ bad
[a-z] 匹配a-z的所有字符也能任意指定区间 [a-z] -> x/a/d/r/t
[0-9] 同样支持数字匹配 [0-9] -> 1/4/7
* 匹配前一个字符0次或多次 be* -> b/be/beeee
+ 匹配前一个字符1次或多次 be+ -> be/beeee
? 匹配前一个字符0次或1次 colou?r - > colour/color
{n} 表示前一个字符确切的次数 be{2}t -> beet
{n,} 表示前一个字符至少出现n be{2,} -> bee/beee/beeeeee
{m,n} 表示前一个字符出现的次数在m-n之间 be{1,3} -> be/bee/beee
^ 表示匹配行首 -
$ 匹配行尾 -
\w 用于匹配字母、数字和下划线 -
\W 用于匹配字母数字和下划线之外的内容 -
\d 用于匹配数字相当于[0-9] -
\D 用于匹配除了数字以外的内容相当于[^0-9] -
\s 匹配空白字符 -
\S 匹配非空白字符 -
.* 贪婪匹配尽可能多的匹配 -
.*?q 懒惰匹配遇到你所给的内容便停止这里是q -
(?=pm) 正向先行断言,只匹配后面有 pm 的内容 -
(?!pm) 负向先行断言,处了后面有pm的内容 -
(?<=$) 正向后行断言,只匹配以$开头的内容 -
(?<!q) 负向后行断言,只匹配不以q -

使用()可以完成分组匹配 ()中为想捕获的内容(?:)可以仅分组不捕获

在这里插入图片描述
|可以支持或的逻辑
在这里插入图片描述

这样可以捕捉以.c.txt结尾的文件

建议直接跟着交互式教程玩一遍,然后自己在在线测试网址看结果,无需看我的举例

举例

  • ^匹配行首
    在这里插入图片描述

  • $匹配行尾
    在这里插入图片描述
    \为转义字符否则.的含义为匹配任何一个字符
    在这里插入图片描述

  • \w
    在这里插入图片描述

  • \W
    在这里插入图片描述
    在这里插入图片描述

  • \d
    在这里插入图片描述

  • \D
    在这里插入图片描述

  • \s
    在这里插入图片描述
    -\S
    在这里插入图片描述

  • (?=)
    匹配以.txt结尾的文件名
    在这里插入图片描述

  • (?!)
    匹配除了.txt的文件名
    在这里插入图片描述
    这样其实不能达到效果
    在这里插入图片描述

  • (?<=)
    匹配所有以点开头的单词,但是不包括.
    在这里插入图片描述-(?<!)
    在这里插入图片描述
    \b表示单词的边界

  • .*
    尽可能长的进行匹配
    在这里插入图片描述

  • .*?
    遇到即停止
    在这里插入图片描述

linux通配符

这个部分与正则的语法有一定的差异
也没有那么复杂

符号 作用
* 匹配任意数量的任意字符
? 匹配单个任意字符
[a-z] 括号内任意一个字符,这与正则规则相同就不多说了
[^0-9] 也支持取反不过使用!也可以

我们使用rm删除命令来举例

删除所有以d开头的目录
在这里插入图片描述

删除所有以数字结尾的目录和文件
注意3是个普通文件他的颜色与目录不同,他也被删除了
在这里插入图片描述

rm -rf * 

删库跑路2333 注意这会删除你当前工作目录的所有内容,而且linux没有类似于回收站的机制基本无法找回,请慎重
在这里插入图片描述
这些基本上够日常使用

不过其实还支持更强大的通配符

更强大的通配符

查看是否开启

shopt extglob

在这里插入图片描述
显示on即正常开启了,如果没有采用下面命令开启

shopt -s extglob

pattern都是通配符

注意如果你的rm后面的删除的文件名没有/那么会针对所有目录和文件操作 如果你不想误操作删除了你的目录的话你就不要加上 -r

  1. ?(pattern)匹配0次或1次
    在这里插入图片描述
    同时删除dir和dirx

  2. *(pattern)匹配0次或多次
    在这里插入图片描述
    删除所有以数字结尾的内容,如果你不采用这个
    在这里插入图片描述
    你就只能删除单个数字结尾的内容

  3. +(pattern)匹配1次或多次
    删除所有以dir开头以数字结尾的目录和文件
    在这里插入图片描述
    注意如果这里是你用*([0-9])你会导致dir23xdirx也被删除,因为*([0-9])可以是0次,随后前面的*可以把最后的x也匹配上
    在这里插入图片描述

  4. !(pattern)不匹配pattern
    删除所有不以数字为结尾的目录
    在这里插入图片描述
    注意这个/非常关键如果你没有/那么你的对象不再只是目录文件也算了
    在这里插入图片描述
    你会删除所有不以数字结尾的文件和目录

  5. @(pat1|pat2)同时匹配pat1pat2的内容
    删除所有纯数字和纯字母的文件和目录
    在这里插入图片描述
    你可以主要到我使用了一些嵌套扩展通配符这也是可以的


网站公告

今日签到

点亮在社区的每一天
去签到