第4章 文件名置换
当你在使用命令行时,有很多时间都用来查找你所需要的文件。 S h e l l提供了一套完整的
字符串模式匹配规则,或者称之为元字符,这样你就可以按照所要求的模式来匹配文件。还
可以使用字符类型来匹配文件名。在命令行方式下,使用元字符更为快捷,所以在本章我们
只介绍这部分内容。
在本章我们将讨论:
• 匹配文件名中的任何字符串。
• 匹配文件名中的单个字符。
• 匹配文件名中的字母或数字字符。
下面就是这些特殊字符:
* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配 [ ] 中所包含的任何字符。
[!...] 匹配 [ ] 中非感叹号!之后的字符。
当 s h e l l遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样
用户就可以用它们来匹配相应的文件名。
4.1 使用*
使用星号 *可以匹配文件名中的任何字符串。 在下面的例子中,我们给出文件名模式 app*,
它的意思是文件名以 app开头,后面可以跟随任何字符串,包括空字符串:
*也可以用在文件名模式的开头,在下面的例子中, *.doc匹配所有以 .doc结尾的 文件名:
*还可以用在文件名的当中,在下面的例子中, c l * . s e d用于匹配所有以 c l 开头、后面跟任
何字符串、最后以 .sed 结尾的文件名:
在使用 c d 命令切换路径时,使用星号还可以省去输入整个路径名的麻烦,下面给出一个
这样的例子:
32 第一部分 shell
下载
4.2 使用?
使用可以匹配文件名中的任何单个字符。在下面的例子中,我们列出文件名以任意两个
字符开头,接着是 R,后面跟任何字符的文件:
在下面的例子中,我们列出文件名以 c o n f 开头、中间是任意两个字符、最后以 . l o g 结尾的
文件:
在下面的例子中, f ? ? * s匹配所有以 f 开头、中间是任意两个字符、后面跟随任意字符串、
并以 s 结尾的文件名:
4.3 使用[...]和[!...]
使用 [...]可以用来匹配方括号 [ ] 中的任何字符。在这一方法中,还可以使用一个横杠 -来连
接两个字母或数字,以此来表示一个范围。在下面的例子中,列出了以 i或o开头的文件名:
为了匹配所有以 l o g . 开头、后面跟随一个数字、然后可以是任意字符串的文件名,可以用
log.[0-9]*,其中 [0-9] 表示任意单个数字,星号 *代表了其他字符:
下面的例子和刚才的有所不同,使用 [ ! 0 - 9 ] *来表示非数字开头的字符串,其中 ! 是非的意
思:
下面的例子中,列出了所有以LPS开头、中间可以是任何两个字符,最后以1结尾的文件名:
33
第4章 文件名置换
下载
下面的例子中,列出了所有以 LPS开头、中间可以是任何两个字符,后面跟随一个非数字
字符、然后是任意字符串的文件名:
为了列出所有以大写字母开头的文件名,可以用:
$ ls [A-Z]*
为了列出所有以小写字母开头的文件名,可以用:
$ ls [a-z]*
为了列出所有以数字开头的文件名,可以用:
$ ls [0-9]*
为了列出所有以 . 开头的文件名(隐含文件,例如 .profile、.rhosts、.history等等),可以
用:
$ ls .*
4.4 小结
使用元字符可以大大减少你在查找文件名上的工作量。这是一种非常有效的模式匹配方
法,在后面的章节中,我们还将在讨论正则表达式的时候对文本处理中所涉及到的元字符进
行更为详尽的讨论。