本站内容有下面分类知识,欢迎您的到来^_^

shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言

设soyo123为首页 收藏本站
当前位置:|主页>shell基础篇>

学习元字符及其应用

百度收藏 QQ搜藏
    当你在使用命令行时,有很多时间都用来查找你所需要的文件。S h e l l提供了一套完整的字符串模式匹配规则,或者称之为元字符,这样你就可以按照所要求的模式来匹配文件。还可以使用字符类型来匹配文件名。在命令行方式下,使用元字符更为快捷,所以在本章我们只介绍这部分内容。
    在本章我们将讨论:
   . 匹配文件名中的任何字符串。
   . 匹配文件名中的单个字符。
   . 匹配文件名中的字母或数字字符。
   下面就是这些特殊字符:
   * 匹配文件名中的任何字符串,包括空字符串。
   ? 匹配文件名中的任何单个字符。
   [...] 匹配[ ]中所包含的任何字符。
   [!...] 匹配[ ]中非感叹号!之后的字符。
    当s h e l l遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样
用户就可以用它们来匹配相应的文件名。
1 使用*
    使用星号*可以匹配文件名中的任何字符串。在下面的例子中,我们给出文件名模式app*,它的意思是文件名以app开头,后面可以跟随任何字符串,包括空字符串:
     $ ls app*
     appdva      app_tapss
     appdva_SLA
    *也可以用在文件名模式的开头,在下面的例子中,*.doc匹配所有以.doc结尾的文件名:
     $ ls *.doc
     accounts.doc   qtr_end.doc
    *还可以用在文件名的当中,在下面的例子中,cl* .sed用于匹配所有以cl开头、后面跟任何字符串、最后以. sed结尾的文件名:
       $ ls cl*.sed
      cleanmenup.sed    cleanlogs.sed
      cleanadad.sed
    在使用c d命令切换路径时,使用星号还可以省去输入整个路径名的麻烦,下面给出一个
这样的例子:
      $ pwd
      /etc
      $ ls -l|grep ^d
      ...
      ...
      drwxr-xr-x    2   root    root    1024  Jan 26 14:41  cron.daily
      drwxr-xr-x    2   root    root    1024  Jan 27  1998  cron.hourly
      drwxr-xr-x    2   root    root    1024  Jan 27  1998  cron.monthly
      drwxr-xr-x    2   root    root    1024  Jan 26 14:37  cron.weekly
      ...
      $ cd cron.w*
      $pwd
      /etc/cron.weekly
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
3 使用[...]和[!...]
   使用[...]可以用来匹配方括号[ ] 中的任何字符。在这一方法中,还可以使用一个横杠-来连接两个字母或数字,以此来表示一个范围。在下面的例子中,列出了以i或o开头的文件名:
      $ ls [io]*
      inetd.cinf    initrunlvl
      inputrc       issue
      nfo-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 lgo.[!0-9]*
      log.sybase
    下面的例子中,列出了所有以LPS开头、中间可以是任何两个字符,最后以1结尾的文件名:
      $ ls  LPS??[1]
      LPSI91  LPS091
     下面的例子中,列出了所有以L P S开头、中间可以是任何两个字符,后面跟随一个非数字字符、然后是任意字符串的文件名:
      $ ls LPS??[!0-9]*
      LPSOSI     LPSTLP
      LPSOPS     LPSPOPATR
    为了列出所有以大写字母开头的文件名,可以用:
    $ ls [A-Z]*
    为了列出所有以小写字母开头的文件名,可以用:
    $ ls [a-z]*
    为了列出所有以数字开头的文件名,可以用:
    $ ls [0-9]*
    为了列出所有以. 开头的文件名(隐含文件,例如.profile、.rhosts、.history等等),可以用:
    $ ls .*
4 小结
    使用元字符可以大大减少你在查找文件名上的工作量。这是一种非常有效的模式匹配方法,在后面的章节中,我们还将在讨论正则表达式的时候对文本处理中所涉及到的元字符进行更为详尽的讨论。
上一篇:后台执行的nohug命令 下一篇:正则表达式语法
power by soyo123 2007-2008