当在使用命令行时,有很多时间都用来查找你所需要的文件,如ls find等。 sehll提供了一套完整的字符串模式匹配规则,或者称之为元字符,当shell遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名,我理解这可以称为通配符。
通配符与正则表达式是有区别的,简单来说:通配符是用来匹配文件名称的,正则表达式是用来匹配字符串的;
在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的
而通配符多用在文件名上,比如查找find,ls,cp,等等
通配符
字符 | 含义 | 实例 |
---|---|---|
* | 匹配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,…} | 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] | a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。 |
shell元字符(特殊字符 Meta)
字符 | 说明 |
---|---|
IFS | 由 |
CR | 由 |
= | 设定变量。 |
$ | 作变量或运算替换(请不要与 shell prompt 搞混了)。 |
> | 重导向 stdout。 * |
< | 重导向 stdin。 * |
| | 命令管线。 * |
& | 重导向 file descriptor ,或将命令置于背境执行。 * |
( ) | 将其内的命令置于 nested subshell 执行,或用于运算或命令替换。 * |
{ } | 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。 |
; | 在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 * |
&& | 在前一个命令结束时,若返回值为 true,继续执行下一个命令。 * |
|| | 在前一个命令结束时,若返回值为 false,继续执行下一个命令。 * |
! | 执行 history 列表中的命令。* |
shell转义符
字符 | 说明 |
---|---|
‘’(单引号) | 又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。 |
“”(双引号) | 又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替 |
\ (反斜杠) | 又叫转义,去除其后紧跟的元字符或通配符的特殊意义。 |
通配符小栗子
字符 | 说明 |
---|---|
5* | 5开头的所有字符串 |
*5 | 5结尾的所有字符串 |
*5? | 以5为倒数第二个字符的字符串 |
[0-9] | 所有以数字的字符 |
[1,2] | 1或者2 |
[!0-9] | 不是数字的字符 |
ls /etc/[!a-n]*.conf | 列出/etc/目录中不是以字母a到n开头的,并且以.conf结尾的文件 |
ls /etc/[a-n]*.conf | 列出/etc/目录中以字母a到n开头的,并且以.conf结尾的文件 |
ls /bin/[ck]* | 列出以c或k开头的文件名 |
参考链接
http://www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html