问题:一个日志目录,里头存着很多 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 之后,才能是正则语义
语法格式是 +正则