linux中 正则表达式和通配符的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中 正则表达式和通配符的区别相关的知识,希望对你有一定的参考价值。

通配符
它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通配符有几下几种:
*:匹配任意多个字符
?:匹配任意一个字符
[...]:匹配中括号内出现的任意一个字符
[!...]:不匹配中括号内出现的任意一个字符

一般出现在要shell命令或脚本中,匹配特定的文件名

正则表达式
它是一个字符匹配标准,一些命令工具按此标准实现字符匹配,根据命令支持的匹配功能可分为基础正则表达式和扩展正则表达式,常用于支持正则表达式的工具,如sed,grep,awk...
有如下一些常用的匹配元字符:

字符匹配
.:匹配任意单个字符
*:匹配其前面一个字符出现任意次
?:匹配其前面的字符1次或0次
+:匹配其前面一个字符出现至少一次(在扩展正则表达式中)

位置匹配
^:锚定行首
$:锚定行尾
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现
\B:非单词的开头或结尾
^$:空白行

分组() :
(ab)* : 匹配ab这个分组出现任意次
\1:引用第一个左括号以及与之对应的右括号所包括的所有内容,同理还有\2,\3

特殊子字符类:
[:alnum:] :任何字母和数字
[:alpha:] :任何字母
[:cntrl:] :控制字符. 在ASCII表中对应八进制000 到 037, 和177 ('DEL').
[:digit:] :任何数字
[:graph:] :匹配打印字符,相当于'[:alnum:]' +'[:punct:]'.
[:lower:] :小写字母
[:print:] :可打印字符,相当于 '[:alnum:]', '[:punct:]', 和space.
[:punct:] 标点符号,'! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ' | ~'
[:space:] 空白字符,tab, newline, vertical tab, form feed, carriage return, and space.
[:upper:] 大写字母
[:xdigit:] 任何16进制的数字,相当于[0-9a-fA-F]
所以:^[[:space:]]*$ :匹配没有任何内容的行

需要注意:[]中的特殊字符如.已经失去了其特殊含义,和方括号中的普通字符[abc]一样。
参考技术A

通配符作用主要是用来匹配文件名:

例如:rm -fr *oldboy #删除oldboy结尾。

正则表达式主要是用来过滤文件内容:

例如:grep "^$" oldboy.txt #过滤空行。

更多内容对比推荐一本细致实战书籍:

linux通配符

shell 通配符
通配符与正则表达式的区别
1、用途不同
通配符用于通配文件名,正则表达式用于匹配文本内容
2、使用地点不同
通配符通常只能用于shell,被shell自解释。
正则表达式需要被正则引擎解析,需要用于支持正则表达式的代码或命令中。
3、元字符不同
通配符只有三个元字符,正则表达式根据正则引擎不同会多种多样。
并且相同元字符表示的含义也可能不同。如通配符中表示匹配任意字符,正则中表示前面的字符重复0或任意次。

*   匹配 0 或多个字符  a*b  a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
?    匹配任意一个字符   a?b  a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]  匹配 list 中的任意单一字符    a[xyz]b   a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]     匹配 除list 中的任意单一字符   a[!0-9]b  a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] a[0-9]b  0与9之间必须也只能有一个字符 如a0b, a1b... a9b。
{string1,string2,...}   匹配 sring1 或 string2 (或更多)其一字符串  a{abc,xyz,123}b    a与b之间只能是abc或xyz或123这三个字符串之一。

特殊通配
范围匹配:

[0-9]:表示匹配数字
[a-z]:表示匹配小写字母
[A-Z]:表示匹配大写字母

范围匹配取反:


[^0-9]:表示匹配非数字``
[^a-z]:表示匹配非小写字母`
[^A-Z]:表示匹配非大写字母

特殊匹配方式:

[[:space:]]:表示匹配空白字符
[[:punct:]]:表示匹配标点符号
[[:digit:]]:表示匹配数字
[[:lower:]]:表示匹配小写字母
[[:upper:]]:表示匹配大写字母
[[:alpha:]]:表示匹配字母,不区分大小写
[[:alnum:]]:表示匹配字母数字。

特殊匹配方式也支持取反,取反方式如下:
[^[::]]

以上是关于linux中 正则表达式和通配符的区别的主要内容,如果未能解决你的问题,请参考以下文章

Linux之正则表达式

linux正则表达式

Linux 正则表达式 grep

linux通配符

Linux 基础正则表达式

4-19 Linux中的正则表达式 --- 字符匹配