bash使用正则匹配方法--shopt -s extglob

来源:互联网 发布:易语言编写软件 编辑:程序博客网 时间:2024/06/11 17:18

问题:一个日志目录,里头存着很多 00, 01, 02 … 31 的日期目录,如何列示出00到12号之间的所有目录?也就是说,如何在文件名上面,使用正则?

shopt (shell option 这么理解易记)

$ shoptautocd          offcdable_vars     offcdspell         offcheckhash       offcheckjobs       offcheckwinsize    oncmdhist         oncompat31        offcompat32        offcompat40        offcompat41        offcompat42        offcomplete_fullquote  ondirexpand       offdirspell        offdotglob         offexecfail        offexpand_aliases  onextdebug        offextglob         onextquote        onfailglob        offforce_fignore   onglobstar        offglobasciiranges offgnu_errfmt      offhistappend      onhistreedit      offhistverify      offhostcomplete    offhuponexit       offinteractive_comments    onlastpipe        offlithist         offlogin_shell     offmailwarn        offno_empty_cmd_completion offnocaseglob      offnocasematch     offnullglob        offprogcomp        onpromptvars      onrestricted_shell    offshift_verbose   offsourcepath      onxpg_echo        off

这里仅说 一个配置项:extglob

shopt -s extglob   #打开bash 识别正则shopt -u extglob   #关闭bash 识别正则

开启之后,以下5个模式匹配操作符将被识别:

?(pattern-list)     #所给模式匹配0次或1次*(pattern-list)     #所给模式匹配0次以上包括0次+(pattern-list)     #所给模式匹配1次以上包括1次@(pattern-list)     #所给模式仅仅匹配1次!(pattern-list)     #不匹配括号内的所给模式

问题解决:如何列示出00到12号之间的所有目录?

ls -al +(0[0-9]|1[0-2])

说明

平时shell的通配符,只是通配语义,不是正则语义
加上这个 extglob 之后,才能是正则语义
语法格式是 +正则

0 0