AWK,SED,REGEX重命名文件
我只是学习使用REGEX,AWK和SED.我目前有一组我想要重命名的文件 – 它们都位于一个目录中.
命名模式是一致的,但我想重新安排文件名,这里是格式: 01._HORRIBLE_HISTORIES_S2.mp4 02._HORRIBLE_HISTORIES_S2.mp4 我想将它们重命名为HORRIBLE_HISTORIES_s01e01.mp4 – 其中e01是从第一列收集的.我知道我想要从第一列中获取“01”,将其填入变量中,然后将其粘贴到每个文件名中的S2之后,同时我想将其从文件名的开头与“.”一起删除. _“,另外我想将”S2“改为”s02“. 如果有人会这么善良,你能帮助我用awk / sed写一些东西并解释一下我可以从中学到的程序吗? 解决方法for f in *.mp4; do echo mv "$f" "$(awk -F '[._]' '{ si = sprintf("%02s",substr($5,2)); print $3 "_" $4 "_s" si "e" $1 "." $6 }' <<<"$f")" done >循环所有* .mp4文件. 注意mv之前的echo以允许您安全地预览生成的命令 – 将其删除以执行实际重命名. 替代方案:使用正则表达式的纯bash解决方案: for f in *.mp4; do [[ $f =~ ^([0-9]+)._([^.]+)_S([^.]+).(.+)$]] echo mv "$f" "${BASH_REMATCH[2]}_s0${BASH_REMATCH[3]}e${BASH_REMATCH[1]}.${BASH_REMATCH[4]}" done >使用bash的正则表达式匹配运算符=?,使用捕获组((…)中的子字符串)匹配每个文件名并提取感兴趣的子字符串. 如上所述,您需要在mv之前删除echo以执行实际重命名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |