我有几个文件命名与不同的长度,但有一个模式,我可以找到使用SED。我想删除它中间的一组确定的字符,这样我就可以重命名它们,但是我在某些时候不幸地失败了.示例文件是:
马修斯203-34510033_20220217111125(237).wav
乞讨中的名称以及括号内的值将在每个文件上增加,很快将大于3位数。我需要删除括号前的6位数字,我的regex可以正确地找到它们:
s/.*_203.*_202\d{5}\K.+?(?=\()//我使用以下脚本来重命名文件:
#!/bin/bash
for filename in *.wav; do
newFilename=$(sed -E 's/.*_203.*_202\d{5}\K.+?(?=\()//' <<< "$filename")
mv "$filename" "$newFilename"
done当我运行脚本时,我接收到输出:
sed: -e expression #1, character 46: Invalid Preceding regular expression.我的苏醒怎么了?
编辑:
第四只鸟给出的解决方案有效: newFilename=$(sed -E 's/(_203.*_2020-9{5})0-9+(()/\1\2/‘<<< "$filename")
发布于 2022-02-22 14:51:22
如果要匹配括号之间的模式,则(?=.)不支持语法。你的模式可能会变成
s/.*_203.*_202[0-9]{5}.+?\(([^\)]+)\)/\1/发布于 2022-02-22 15:06:48
如果您使用基于Perl的rename命令:
$ rename -n 's/.*_203.*_202\d{5}\K.+?(?=\()//' *.wav
rename([Matheus]_203-34510033_20220217111125(237).wav, [Matheus]_203-34510033_20220217(237).wav)-n选项用于试运行,删除它以进行实际重命名。而且,您不需要在regexp开始时使用.*。
我需要删除括号前的6位数字。
rename -n 's/\d{6}(?=\()//' *.wav
如果没有安装命令,请检查发行版的存储库,或者可以通过元潘: File::Rename安装它。
https://stackoverflow.com/questions/71223179
复制相似问题