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

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

shopt (shell option 这么理解易记)

$ shopt
autocd          off
cdable_vars     off
cdspell         off
checkhash       off
checkjobs       off
checkwinsize    on
cmdhist         on
compat31        off
compat32        off
compat40        off
compat41        off
compat42        off
complete_fullquote  on
direxpand       off
dirspell        off
dotglob         off
execfail        off
expand_aliases  on
extdebug        off
extglob         on
extquote        on
failglob        off
force_fignore   on
globstar        off
globasciiranges off
gnu_errfmt      off
histappend      on
histreedit      off
histverify      off
hostcomplete    off
huponexit       off
interactive_comments    on
lastpipe        off
lithist         off
login_shell     off
mailwarn        off
no_empty_cmd_completion off
nocaseglob      off
nocasematch     off
nullglob        off
progcomp        on
promptvars      on
restricted_shell    off
shift_verbose   off
sourcepath      on
xpg_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 之后,才能是正则语义
语法格式是 +正则

你可能感兴趣的:(shell)