将数字范围与 zsh 中的非有效零相匹配

将数字范围与 zsh 中的非有效零相匹配

我的目录中有这样的文件:

booklet-001.pdf
booklet-002.pdf
booklet-003.pdf
booklet-997.pdf
booklet-998.pdf
booklet-999.pdf

那么,我想匹配编号为079到256的文件。但是如何用zsh的正则表达式匹配来做到这一点呢?

答案1

如果它是匹配您想要使用 glob 运算符,而不是生成文件列表(无论它们是否存在)<x-y>

print -rC1 -- booklet-<79-256>.pdf

<79-256>匹配代表 79 到 256 之间数字的任何 ASCII 十进制数字序列,因此将匹配79or0790000000079...

请注意,它*<79-256>.pdf也会匹配 on,booklet-456789.pdf因为它booklet-4567后面跟着89(匹配<79-256>) 后面跟着.pdf。更改为(|*[^0-9])<79-256>.pdf以匹配根名称以 79 到 256 之间的数字结尾的 pdf 文件。

booklet-079.pdf对于匹配但不匹配的booklet-79.pdfglob ,booklet-0079.pdf请使用 (after set -o extendedglob):

print -rC1 -- booklet-(<79-256>~^???).pdf

<79-256> 不是不是 ???

答案2

只需在 zsh 中执行以下操作:

ls booklet-{079..256}.pdf

测试一下,有效!

相关内容