shell 通配符:shell通配符的作用是用来进行文件匹配(file matching)的,通配符和正则表达式都有特殊的字符,但是解释情况不一样。
正则表达式 :正则表达式是一种规范,在linux中正则表达式是用来进行字符查找的。
一般来说需要文件名字的地方使用的是shell通配符,需要匹配字符串的地方使用的是正则表达式!
在linux中一般shell只解释三个通配符:
*代表任意长度的任意字符
?代表任意一个字符
[]代表选中[]中的任意一个字符
linux下的元字符列表
符号 | 意义 |
* | 代表任意多个字符 |
? | 代表一个任意的字符 |
[ ] | 代表在括号内的任意一个字符 |
[ - ] | 若-号在中括号中时(不能在开头和结尾的位置),代表语系排序范围内的任意一个字符。注意该范围是与语系有关的。[A-Z]在POSIX下是所有的大写字母,在en下是除了小写字母a以外的所有字母。 |
[^ ] | 当^处于第一个字符时,表示反向选择。 |
bash中除了以上的通用字符,还有以下以下特殊字符:
特殊符号 | 意义 |
# | 注释 |
\ | 转义符号,一般将特殊字符转义为普通字符 |
| | 管道 |
; | 命令分割 |
~ | 用户主目录 |
$ | 变量提取 |
& | 后台运行程序 |
! | 非 |
/ | 目录连接符 |
( ) | ()中间的命令通过产生一个子shell来执行 |
{ } | 命令区块的组合,以分号分割 |
一般shell (shell脚本),find等使用的是shell通配符,grep等命令使用的是正则表达式来匹配字符串。
可以通过对特殊字符?或者"."(点)的使用来确定命令是使用的shell通配符还是正则表达式。
在此处使用的是shell通配符(?在正则表达式中表示重复?前面字符零次或一次)