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

相关内容

热门资讯

股价走高触发强赎 7月将有两只... 近日,银行正股股价表现强势,多只银行转债触发强制赎回条款。7月1日是杭银转债最后一个交易日,其最后转...
300548,“改名”,股价历... 科技股和顺周期板块再现“跷跷板”走势。今天上午,顺周期板块走强,银行、有色金属、白酒、新能源等板块上...
明阳电路在昆山投资成立集成电路... 人民财讯7月2日电,企查查APP显示,近日,昆山华芯微测集成电路有限公司成立,法定代表人为窦旭才,经...
民生银行“易创E贷”获“202... 在近日举行的第七届数字普惠金融大会上,民生银行“易创E贷”产品凭借在服务科技型中小微企业的创新与实践...
机器人大军逼近,很快,亚马逊的...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 亚马逊正迅速接近仓库...
广东省教育考试院通报:不存在中... 7月2日,广东省教育考试院发布通报称,7月1日下午广东省初中学业水平考试(以下简称“中考”)数学科目...
国际油价承压 中东油企拟放缓全... 财联社7月2日讯(编辑 秦嘉禾)在国际油价下行压力加剧背景下,中东两大国有能源巨头——沙特阿美(Sa...
光伏50ETF、光伏龙头ETF... 光伏设备板块走强,亿晶光电、欧晶科技涨停。银华光伏50ETF、汇添富光伏龙头ETF、浦银安盛光伏龙头...
世界银行发布重磅预测:黄金今年... 错过上半年,别再错过下半年!世界银行继续看好贵金属前景,黄金、白银、铂金或将继续延续强势……世界银行...
洪灝称高分红投资策略应继续有所... 【#洪灝称高分红投资策略应继续有所表现#】中国股市近期一个显著趋势是分红和回购活动显著增加。其中,许...