【问题标题】:trying to use rename command but having issues尝试使用重命名命令但有问题
【发布时间】:2021-10-10 10:06:51
【问题描述】:

我有几个类似的文件

file01xyg.mkv file02xyg.mkv file03xyg.mkv file04xyg.mkv file05xyg.mkv file06xyg.mkv

并尝试重命名它们,以便他们只说 01.mkv 02.mkv

我尝试通过运行来使用重命名命令:

rename -n -e 's/file0[1-6]xyg.mkv/[1-6].mkv/' *.mkv

但后来我得到:

(file01xyg.mkv, [1-6].mkv) (file02xyg.mkv, [1-6].mkv) (file03xyg.mkv, [1-6].mkv) (file04xyg.mkv, [1-6].mkv) (file05xyg.mkv, [1-6].mkv) (file06xyg.mkv, [1-6].mkv)

【问题讨论】:

    标签: regex bash rename


    【解决方案1】:

    替换命令的格式为s/regex/replacement/。替换不是一个正则表达式,因此替换中的[1-6] 只是一个文字字符串。

    使用组() 并使用\1 引用组内的匹配部分:

    rename -n 's/file(0[1-6])xyg.mkv/\1.mkv/' *.mkv
    

    【讨论】:

    • 正确,这样就可以了,你能解释一下我做错了什么以及它是如何工作的吗?
    • 所以替换部分永远不能是正则表达式?
    • 是的。替换部分中的正则表达式甚至没有意义。正则表达式仅用于读取数据,不用于写入。在您尝试s/file0[1-6]xyg.mkv/[1-6].mkv/ 时,人类可能会推断出替换[1-6] 应该与匹配的[1-6] 相同,但对于计算机而言,这一点都不明显。如果替换正则表达式根本不像搜索模式,即使是人类也会摸不着头脑。您对正则表达式替换 s/abc/.{7}/ 有什么期望?这应该生成一个随机的 7 个字符的字符串吗?
    • 啊,我明白你的意思了,有没有什么地方我可以了解更多关于这个特定解决方案、组然后匹配它的信息。那是重命名命令的一部分还是通用的?
    • rename 使用许多其他工具(例如 grep -P)和编程语言支持的 perl 兼容正则表达式 (PCRE)。您可以搜索诸如“PCRE 捕获组”之类的关键字,但这里没有什么可说的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2018-02-13
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多