【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中的通配符

相关内容

热门资讯

重磅!一线城市房地产调控全面松... 一线城市房地产调控全面松绑,释放购房新信号2025 年,房地产市场风云突变,一则重磅消息如惊雷般响彻...
晶科能源携多款创新光储方案亮相... 转自:证券日报网    本报记者 曹琦    6月11日至13日,第十八届(2025)国际太阳能光伏...
“山有木兮卿有意,昨夜星辰恰似... “山有木兮卿有意,昨夜星辰恰似你”是什么意思?“山有木兮卿有意,昨夜星辰恰似你”的意思是“我对你有意...
股权转让+增资 日联科技拿下... 转自:证券日报网    本报记者 李亚男    6月13日晚间,日联科技集团股份有限公司(以下简称“...
一个人开什么店好,两万块开什么... "劳动人民、劳动灵魂和劳动都是人."这在去年开始流行,所有工作的人都拿他们的工作开玩笑。经过几十年的...
杭州市城区周边哪里有菜地(旱地... 杭州市城区周边哪里有菜地(旱地)或山地租?我想租个几亩种种?若有,大概要多少钱一亩?杭州市城北郊区就...
西湖不欢迎“粗暴的手” 转自:中国环境网近日,“杭州西湖石刻有人拔断松鼠尾巴”一事引起了网友们的关心和讨论。对此,西湖水域管...
吕姓股民向普利退发起索赔 许峰...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...
家里有几个多事的大姑姐怎么办 家里有几个多事的大姑姐怎么办其实只要心态放平一点就好了,家里的大姑姐平常也没有什么事情做,所以只能聊...
贝尔计划赛季末重返皇马,贝尔重... 贝尔计划赛季末重返皇马,贝尔重回皇马的主要原因有哪些?齐达内让他进入首发,不是信任,而是希望在今年夏...
名侦探柯南为什么会有快兰的说法 名侦探柯南为什么会有快兰的说法你可以去看剧场版十四天空中的遇难船的1分30秒的预告片里面有……小兰和...
求跟侠岚类型的动画片 求跟侠岚类型的动画片《千年寻》一样!
刘备为何不踏实治理好夺取的荆州... 刘备为何不踏实治理好夺取的荆州四郡,而是非要借南郡?因为南郡的地理位置太过于紧要,是荆州四郡的门户,...
问道手游70套装怎么做 问道手... 问道手游70套装怎么做 问道手游70级极品套装打造步骤全面解析首先来说的第一个问题 套装是由超级...
苏超第四轮燃爆,网友:小龙虾大... 格隆汇6月14日|据央视财经,在苏超第四轮赛事中,淮安队将迎战南京队,被大家调侃是“小龙虾”与“盐水...
卓驭科技CEO沈劭劼:智能驾驶...   2025第十七届轩辕汽车蓝皮书论坛于2025年6月13日-15日在广州举行。卓驭科技CEO沈劭劼...
倾世王妃的繁体字怎么写的啊 倾世王妃的繁体字怎么写的啊倾世皇妃__倾世皇妃倾世王妃差别就在第一个字
羊城夏夜上演“粤乐新唱·潮挞非... 中新网广州6月14日电 (程景伟 文瑶)当高胡的悠扬遇见架子鼓的爆裂,当粤剧的锣鼓铿锵与贝斯的低沉吟...
前5月我国人民币贷款增加10.... 转自:中工网人民日报海外版北京6月13日电(记者徐佩玉)中国人民银行13日发布的金融统计数据显示,前...
光纤宽带机房为什么有尖叫声 光纤宽带机房为什么有尖叫声呵呵,主板设备,交换机里面有很多小的散热风扇,你听到的声音应该是风扇的声音...