如何在TCL glob中反向匹配排除含Prot的文件?
解决Tcl glob排除含特定字符串文件的问题
你可以用两种方式实现需求:
方法1:直接用glob的否定模式
Tcl 8.5及以上版本的glob支持用!开头的模式来排除匹配项,直接把排除规则加到glob命令里就行:
set SASA_LIG_PROCESSED [lsort [glob -directory "${WORKDIR}/" -type f -tails *SASA* !*Prot*]]
这个命令先匹配所有包含SASA的文件,再排除其中包含Prot的文件,最后排序输出。
方法2:用lfilter过滤结果
如果你的Tcl版本较低不支持glob的否定模式,可以先获取所有目标文件,再用lfilter过滤掉含Prot的项:
# 先获取所有带SASA的文件 set all_sasa_files [lsort [glob -directory "${WORKDIR}/" -type f -tails *SASA*]] # 过滤掉包含Prot的文件 set SASA_LIG_PROCESSED [lfilter $all_sasa_files {![string match "*Prot*" $_]}]
为什么你之前的规则无效?
Tcl的glob只支持简单通配符(*匹配任意字符、?匹配单个字符),不支持Perl正则里的否定前瞻语法(?!),所以你写的SASA*_?!Prot_*这种规则在Tcl里不生效。
内容的提问来源于stack exchange,提问作者Nikola
相关产品推荐
相关产品推荐

