Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1103409
  • 博文数量: 1310
  • 博客积分: 3980
  • 博客等级: 中校
  • 技术积分: 8005
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-09 22:05
文章分类

全部博文(1310)

文章存档

2011年(1)

2008年(1309)

我的朋友

分类:

2008-06-10 20:57:35

当你在使用命令行时,有很多时间都用来查找你所需要的文件。Shell提供了一套完整的字符串模式匹配规则,或者称之为元字符,这样你就可以按照所要求的模式来匹配文件。还可以使用字符类型来匹配文件名。在命令行方式下,使用元字符更为快捷,所以在本章我们只介绍这部分内容。
在本章我们将讨论:
• 匹配文件名中的任何字符串。
• 匹配文件名中的单个字符。
• 匹配文件名中的字母或数字字符。

下面就是这些特殊字符:
* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。
当shell遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名。

4.1 使用*

使用星号*可以匹配文件名中的任何字符串。在下面的例子中,我们给出文件名模式app *,它的意思是文件名以app开头,后面可以跟随任何字符串,包括空字符串:
$ ls app*
appdva app_tapes appdva_SLA

*也可以用在文件名模式的开头,在下面的例子中,* .doc匹配所有以.doc结尾的文件名:
$ ls *.doc
accounts.doc qtr_end.doc

*还可以用在文件名的当中,在下面的例子中,cl*.sed用于匹配所有以cl开头、后面跟任何字符串、最后以.sed结尾的文件名:
$ ls cl*.sed
cleanmeup.sed cleanlogs.sed cleanmessages_sed

在使用cd命令切换路径时,使用星号还可以省去输入整个路径名的麻烦,下面给出一个这样的例子:
$ pwd
/etc
$ ls -l | grep ^d
drwx------ 49 root root 3672 2007-08-27 22:36 .
drwxr-xr-x 24 root root 560 2007-08-14 11:47 ..
drwxr-xr-x 2 root root 552 2007-02-13 16:23 amap-2.7
drwxr-xr-x 2 500 users 888 2003-07-30 14:04 bin
drwxr-xr-x 10 root root 576 2007-01-01 00:08 cerberus
drwxr-xr-x 7 root root 504 2007-07-29 01:49 cerberus_2.0
$ cd cerberus_*
$ pwd
cerberus_2.0

4.2
使用?

使用可以匹配文件名中的任何单个字符。在下面的例子中,我们列出文件名以任意两个字符开头,接着是R,后面跟任何字符的文件:
$ ls ??R*
BAREAD

在下面的例子中,我们列出文件名以conf开头、中间是任意两个字符、最后以.log结尾的文件:
$ ls conf.??.log
conf12.log conf.23.log conf25.log

在下面的例子中,f??*s匹配所有以f开头、中间是任意两个字符、后面跟随任意字符串、并以s结尾的文件名:
$ ls f??*s

ftpaccess ftpconversions ftpgroups ftphosts ftpusers

4.3
使用[...]和[!...]

使用[ . . . ]可以用来匹配方括号[ ]中的任何字符。在这一方法中,还可以使用一个横杠-来连接两个字母或数字,以此来表示一个范围。在下面的例子中,列出了以i或o开头的文件名:
$ ls [io]*
inted.conf initrunlv1 inputrc issue info-dir inittab
ioctl.save issue.net

为了匹配所有以log.开头、后面跟随一个数字、然后可以是任意字符串的文件名,可以用log.[0-9]*,其中[0-9 ]表示任意单个数字,星号*代表了其他字符:
$ ls log.[0-9]*
log.0323 log.0324 log.0325 log.0326

下面的例子和刚才的有所不同,使用[!0-9]*来表示非数字开头的字符串,其中!是非的意思:
$ ls log.[!0-9]*
log.sybase

下面的例子中,列出了所有以LPS开头、中间可以是任何两个字符,最后以1结尾的文件名:
$ ls LPS??[1]
LPSI91 LPSO91

下面的例子中,列出了所有以LPS开头、中间可以是任何两个字符,后面跟随一个非数字字符、然后是任意字符串的文件名:
$ ls LPS??[!0-9]*
LPSOSI LPSILP LPSOPS LPSPOPQTR

为了列出所有以大写字母开头的文件名,可以用:
$ ls [A-Z]*

为了列出所有以小写字母开头的文件名,可以用:
$ ls [a-z]*

为了列出所有以数字开头的文件名,可以用:
$ ls [0-9]*

为了列出所有以. 开头的文件名(隐含文件,例如.profile、.rhosts、.history等等),可以用:
$ ls .*

4.4
小结

使用元字符可以大大减少你在查找文件名上的工作量。这是一种非常有效的模式匹配方法,在后面的章节中,我们还将在讨论正则表达式的时候对文本处理中所涉及到的元字符进行更为详尽的讨论。


Tags -
阅读(264) | 评论(0) | 转发(0) |
0

上一篇:命令执行顺序

下一篇:后台执行命令

给主人留下些什么吧!~~