小编Ben*_*ley的帖子

如何在 ZMV 正则表达式中表示重复?

我正在尝试手动从 Rails 资产中提取摘要(不要问)。我被引导到 ZMV 以轻松进行基于正则表达式的查找/替换。但是{32}用于指定重复量的正常语法不起作用:

$ zmv -n '(**/)(*)' '$1${2//-[A-Za-z0-9]\{32\}/}'
Run Code Online (Sandbox Code Playgroud)

我尝试了一些其他格式。这一点,例如,工作,但就是太贪了(它会变成image-3.pngimage.png为例):

$ zmv -n '(**/)(*)' '$1${2//-[A-Za-z0-9]##\./.}'
Run Code Online (Sandbox Code Playgroud)

这种双散列语法仅在大量谷歌搜索后才出现(我已经预料到了+)。但我终其一生都无法找到如何{32}工作。我试过#32#?这似乎有效,但那是因为它正在阅读它(在我看来)?32?,这意味着它遇到了摘要或最后一个字符中包含 3 的任何内容。

我如何表示 zmv 中的字符重复?

编辑:

显然,查看我试图匹配的文件名会有所帮助吗?要清楚:我的问题是“我如何表示 zmv 中的字符重复” 而不是“我如何匹配这些文件名”(我知道标准 RegEx 格式的答案的问题)。如果有帮助,这是我之前和之后的打算:

directory/asset-jej4jtifne9bjkkeuwr09rewrewlur23.css
another-directory/style-748reiodlpqwerntaerwerwerexfzsdf.js.gz
directory/subdirectory/this-is-a-thing-qwertyuiopasdfghjklzxcvbnm123456.js
third-directory/should-not-match-3.css
Run Code Online (Sandbox Code Playgroud)

应该变成:

directory/asset.css
another-directory/style.js.gz
directory/subdirectory/this-is-a-thing.js
third-directory/should-not-match-3.css
Run Code Online (Sandbox Code Playgroud)

第二次编辑:

因为我昨天需要这样做,所以我做了很长的路并且(正如预期的那样)它奏效了。我仍然想知道将来如何避免它。这是我最终使用的命令(我明确地重复了我的字符匹配器 32 次):

$ zmv '(***/)(*)' '$1${2//-[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]/}'
Run Code Online (Sandbox Code Playgroud)

第三次编辑:

为了记录,我在 OS X 上使用 zsh。我想 zmv 跨平台是相同的,但我不能肯定地说。

zsh regex batch-rename

4
推荐指数
1
解决办法
1437
查看次数

标签 统计

batch-rename ×1

regex ×1

zsh ×1