regex - 在 Bash 扩展模式中转义 @(..)

标签 regex bash pattern-matching glob

我偶然发现了 Bash 的“扩展模式”extglob。 http://wiki.bash-hackers.org/syntax/pattern

我正在调查此案:

想象一下这样的目录结构:

/basedir/2017/02/26/uniquedirs1/files.log 
/basedir/2017/02/27/uniquedirs2/files.log 
/basedir/2017/02/28/uniquedirs3/files.log 
/basedir/2017/03/01/uniquedirs4/files.log
/basedir/2017/03/02/uniquedirs5/files.log

如果我想列出目录 2017/02/272017/02/28 的文件,我可以简单地写:

ls /basedir/2017/02/@("27"|"28")/*/files.log

太棒了!\o/

现在是问题。如何在 Bash 扩展模式中定义多个目录?
这不起作用:

ls /basedir/2017/@("02/28"|"03/01")/*/files.log
ls /basedir/2017/@("02\/28"|"03\/01")/*/files.log

有什么方法可以为“扩展模式”定义多个目录吗?

最佳答案

路径名生成仅将模式应用于路径名组件;它们从不匹配分隔组件的 /。大括号扩展在这里会更干净:

ls /basedir/2017/{2/28,3/01}/*/files.log

首先会扩展到

ls /basedir/2017/2/28/*/files.log /basedir/2017/3/01/*/files.log

在对两个结果模式执行路径名生成之前。

关于regex - 在 Bash 扩展模式中转义 @(..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42720002/

相关文章:

Javascript 全名正则表达式问题

javascript - 从 javascript 中的对象数组替换模板中的键

java - 如何拆分包含多个键值对的字符串

linux - 如何根据正则表达式模式将流拆分为 stdout+stderr?

linux - 如何在 Linux 中启动停止的进程

linux - 如何分别在linux终端中获取程序的执行时间

一段的Python正则表达式

scala - 如何使用模式匹配在 Scala 中获取非空列表?

functional-programming - 如何用Pure语言定义 map 融合?

c# - 正则表达式 - 将电子邮件地址与异常(exception)情况相匹配