简短不看版:
通配符和正则表达式比较
(1)通配符和正则表达式看起来有点像,不能混淆。可以简单的理解为通配符只有*,?,[],{}这4种,而正则表达式复杂多了。
(2)*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的。比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任意长度的前面的字符。
(3)使用场景:通配符 是文件名。正则表达式 文本内容
(4) 使用命令 通配符 find rm ls cp 由shell解析; 正则表达式 vi grep sed awk
一、通配符介绍
1、1:Shell常见通配符:
通配符 |
含义 |
实例 |
* |
匹配 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] |
匹配 除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。 |
[!c1-c2]或[^c1-c2] |
匹配不在c1-c2的任意字符 |
a[!0-9]b 如acb adb |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
a{abc,xyz,123}b 列出aabcb,axyzb,a123b |
1、2 shell Meta字符(元字符)
shell 除了有通配符之外,还有一系列自己的其他特殊字符。
字符 |
说明 |
IFS |
由 <space> 或 <tab> 或 <enter> 三者之一组成(我们常用 space ) |
CR |
由 <enter> 产生 |
= |
设定变量 |
$ |
取变量值或取运算值 |
> |
重定向 stdout |
< |
重定向 stdin |
| |
管道符号 |
& |
重导向 file descriptor ,或将命令置于背景执行 |
( ) |
将其内的命令置于 nested subshell 执行,或用于运算或命令替换 |
{ } |
将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围 |
; |
在前一个命令结束时,而忽略其返回值,继续执行下一个命令 |
&& |
在前一个命令结束时,若返回值为 true,继续执行下一个命令 |
|| |
在前一个命令结束时,若返回值为 false,继续执行下一个命令 |
! |
运算意义上的非(not)的意思 |
# |
注释,常用在脚本中 |
\ |
转移字符,去除其后紧跟的元字符或通配符的特殊意义 |
1、3 转义字符
有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要用到转义符了。 shell提供转义符有三种。
字符 |
说明 |
‘’(单引号) |
硬转义,其内部所有的shell 元字符、通配符都会被关掉。 |
“”(双引号) |
软转义,其内部只允许出现特定的shell 元字符:$用于参数替换 `(反单引号,esc键下面)用于命令替换 |
\(反斜杠) |
又叫转义,去除其后紧跟的元字符或通配符的特殊意义 |
二、正则表达式
正则表达式是用来匹配字符串的,针对文件内容的文本过滤工具里,大都用到正则表达式,如vi,grep,awk,sed等。
另外,这篇文章只针对Linux下的文本过滤工具的正则表达式进行讨论,其他的一些编程语言,如C++(c regex,c++ regex,boost regex),java,python等都有自己的正则表达式库。
简单点来说,正则表达式是对一组正在处理的文本的描述。
转载自:https://www.cnblogs.com/rebrobot/p/15929285.html
标签:字符,匹配,正则表达式,通配符,Linux,任意,元字符 From: https://www.cnblogs.com/FBsharl/p/17873277.html