在 CentOS 的命令行中使用命令的时候,如果不使用正则相关的命令,我们是否可以使用类似正则的匹配呢,比如在使用 ls、find、rm 等命令时?
glob 匹配正是您所需要的。此匹配规则在 CentOS 手册页的 glob 条目的第七类中可以找到。 命令 man 7 glob
可查询此信息。
glob 匹配类型
glob 具有四种匹配类型,分别为通配符(wildcard)、字符类(Character classes)、范围(Ranges)和反(Complementation)匹配。
通配符匹配(wildcard)
单个字符串就是一个通配符匹配,但在此字符串中如有 ?、* 或 [ 符号时,将会启用匹配扩展。
* 匹配 0 至 n 个任意字符。
? 匹配任意单个字符。
字符类匹配(Character classes)
[]
匹配括号内用逗号分隔的字符集合中的任意单个字符。
[][!]
将匹配 ]、[、! 三个字符中的任意一个字符。
范围匹配(Ranges)
[start_char-end_char]
方括号加连字符方式,可以匹配多个连续字母字符或递增数字字符集合中的任意单个字符。
[A-Fa-f0-9]
等同 [ABCDEFabcdef0123456789]
反匹配(Complementation)
[!character_set]
方括号中使用感叹号,可以匹配所有字符集合中的,但不包括在感叹号后字符集合的任意单个字符。
[!]a-]
将匹配除了 ]、a、、- 字符的所有字符集合中的任意单个字符。
注意事项
在 shell 命令行中,转译字符 \
可以取消 ?
、*
和 [
的特殊功能,但在方括号中的字符表示愿意,如 [[?*\]
匹配其中四个字符。
在对路径名匹配中, /
字符不能被 ?
、*
或像 “[.-0]” 范围匹配所匹配。在范围匹配中包含 /
,是语法错误。
文件名以 .
为起始时,无法被 *
匹配,必须显式的匹配点号。
rm *
命令不会删除所有文件。
tar c *
命令不会打包所有文件,tar c .
就好多了。