我的目录中有这样的文件:
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 十进制数字序列,因此将匹配79
or079
或0000000079
...
请注意,它*<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.pdf
glob ,booklet-0079.pdf
请使用 (after set -o extendedglob
):
print -rC1 -- booklet-(<79-256>~^???).pdf
(<79-256>
不是不是 ???
)
答案2
只需在 zsh 中执行以下操作:
ls booklet-{079..256}.pdf
测试一下,有效!