【Linux】Shell正则表达式与通配符的区别
创始人
2024-05-30 09:04:00
0

文章目录

  • 1. 正则表达式
  • 2. 通配符
    • 2.1 转义字符
  • 3. 通配符表达式和正则表达式的区别
  • 4. 反例
  • 参考

1. 正则表达式

正则表达式是用来在文本中匹配符合条件的字符串,是包含匹配 。Linux Shell中诸如 grep、awk、sed等命令都支持正则表达式。

可以参见 【linux命令】find命令、grep命令(正则表达式) 中的 <2.2 正则表达式>章节

2. 通配符

通配符是用来匹配符合条件的文件/路径名,是完全匹配 。Linux Shell中 ls、find、cp 命令不支持正则表达式,所以只能使用通配符来进行文件/路径匹配。

在 Shell 中命令中,通常会使用通配符表达式来匹配一些文件,如以下命令可以查找当前目录下所有后缀为 .xml 的文件:

find . -name "*.xml" 

Shell 中可以使用的通配符如下:

通配符说明
*匹配0或任意个字符
匹配一个任意字符,而且必须出现
[ ]匹配中括号的字符。a[xyz]b,a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如 axb, ayb, azb。
[-]匹配中括号的字符。例如[a-b],匹配小写字母,只会匹配集合中的一个
[^]匹配除了中括号的一个字符。例如[^0-9],匹配除了数字的字符,只会匹配集合中的一个
{ab,ba}匹配其中一个字符串。例如匹配ab或ba

2.1 转义字符

有的时候,我们匹配的内容里面会存在 *?,[等通配符中的符号。为了表示他们原来的意思,我们需要使用转义字符 \,如

  • a\[ac\]c 表示匹配 a[a]c 或 a[c]c
  • \ 本身用 \\ 表示。

3. 通配符表达式和正则表达式的区别

通配符看起来和正则表达式很像,但他们并不是同一种东西。正则表达式中的那些量词的匹配规则和这里提到的几个通配符的匹配规则并不相同:

  • 如正则表达式中 * 表示重复前一个字符任意次, 而通配符表达式中 * 表示 0 或多个任意字符。
    在正则表达式中,ab* 表示的是那些 a 后面跟 0 个或多个 b 的字符串,而通配符表达式中 ab* 表示的是那些 ab 后面跟任意个字符的字符串。

  • Java等正则表达式一般是部分匹配的,用来匹配内容中的一部分,如用正则表达式 a 去匹配 bac 这段字符串时,匹配是成功的,匹配到的内容是 a。grep 的正则和通配符相似,也是匹配整行,除非通过 -o 命令强制显示为匹配的片段

    但是通配符表达式的话是全部匹配的,表达式要匹配整个字符串才算匹配成功,如用通配符表达式 *a* 取匹配 bac 这段字符串时,匹配的结果是整个字符串bac。

4. 反例

举个反例:使用 grep 时,应该使用正则表达式,而不是通配符。想看一个 jar 包里是不是有 pom 相关的文件,所以就输入了下面命令

jar tf maven-model-builder-3.5.3.jar | grep 'pom*'

结果输入了一堆文件,而且很多文件都没有 pom 这串字符串的。输出内容是这样的:


org/apache/maven/model/composition/
org/apache/maven/model/interpolation/
org/apache/maven/model/superpom/
org/apache/maven/model/composition/DependencyManagementImporter.class

这就是因为我把通配符表达式和正则表达式搞混了,此处grep 认为用户输入的正则表达式,正则 ‘pom*’ 表示找到po开头,且后面跟0个或多个m的字符串,用下面的命令才得到想要的内容。

jar tf maven-model-builder-3.5.3.jar | grep 'pom.*'   //此时才是pom开头,.号在正则中是特殊字符,代表任意一个字符, 后面跟个*号吗,表示pom后面 出现0个或多个字符

参考

LinuxShell正则表达式与通配符的区别
Shell中的通配符

相关内容

热门资讯

六月二十七日望湖楼醉书 这首诗... 六月二十七日望湖楼醉书 这首诗的写作结构是怎样的?雨前:黑云到入船。雨停:第三句。雨后:最后一句
如果我带着醉意出生,或许我会忘... 如果我带着醉意出生,或许我会忘掉所有的哀伤,这是哪本书上的句子《八百万种死法》,最近电视剧无懈可击之...
优美动人怎么造句孑 优美动人怎么造句孑她的舞姿优美动人,真是让人难以忘怀!
在科学上没有平坦的大道,只有不... 在科学上没有平坦的大道,只有不畏艰险沿着陡峭山路攀登的人,才有希望达到光辉的顶点。这句话的意思。这句...
有什么好看的网王小说?要完结的 有什么好看的网王小说?要完结的四叶三叶草,我的幸福《网王守望幸福《网王——今生无忧》(《夏之纪年》《...
郭达换大米剧本谁写的 郭达换大米剧本谁写的换大米的作者是 郭达和蔡明
园林绿化公司怎么起名 园林绿化公司怎么起名我们是做园林绿化设计、施工管理的自然世界园林绿化公司,新鲜空气园林绿化公司,超时...
命运石之门,谁发信对主人公说你... 命运石之门,谁发信对主人公说你知道的太多了FB指示萌郁发送的(官方资料设定集里写了)FB即是楼下的显...
有关超市开业播放的音乐 有关超市开业播放的音乐请各位关注本问题的大侠们,帮我找一下超市、商场开业时用到的喜庆音乐!谢谢,有追...
现代人物人物苦学成才的故事 现代人物人物苦学成才的故事现代人物人物苦学成才的故事 张恨水先生是我国著名的现代作家。17岁时,他...
是惊的成语,以惊字结尾的成语,... 是惊的成语,以惊字结尾的成语,惊字在后面的成语 第四个字是惊的成语详细〔 胆颤心惊 〕颤:发抖。形...
判断一个女人对你“欲擒故纵”,... 判断一个女人对你“欲擒故纵”,还是“压根没戏”,关键看哪几点?首先知竖,对方给你回消息的语气。如历芹...
自己写的儿童诗 自己写的儿童诗有什么可以帮你的追问:我要自己写的儿童诗,谢谢了!追答:主要是我都不知道有什么要求啊追...
地下城堡2聚火之心有用吗 地下城堡2聚火之心有用吗有用。《地下城堡2:黑暗觉醒》是一款模拟经营与地牢探险游戏高贺轿。游戏中聚火...
在学校如何和老师斗智斗勇 在学校如何和老师斗智斗勇 老师说上课是对牛弹琴时,作为学生的我们应该感到高兴,因为老师说的是事实啊...
神级龙卫男主和谁在一起 神级龙卫男主和谁在一起你好。神级龙卫男主沈浪跟女主白倾雨,苏若雪,柳潇潇最终走到一起了。让我们来看看...
开学以来作文520初中 开学以来作文520初中初一的感觉 似水流年,今天的我们已不再是在草地里玩过家家的小朋友;今天的我们已...
家有黄仙能养两只猫吗 家有黄仙能养两只猫吗可以养的,不犯冲突,猫捉老鼠是老鼠的天敌,养猫后家里的老鼠会少很多。
失忆后的人会不会有恐惧和绝望的... 失忆后的人会不会有恐惧和绝望的心理?我是指那种完全忘记了自己的一切的人。失忆...如果真的全部忘记,...
胡萝卜长期保存方法 胡萝卜长期保存方法胡萝卜放保鲜袋里放冰箱可以放很长时间。