首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确返回sed和重命名

正确返回sed和重命名
EN

Stack Overflow用户
提问于 2022-02-22 14:34:25
回答 2查看 43关注 0票数 0

我有几个文件命名与不同的长度,但有一个模式,我可以找到使用SED。我想删除它中间的一组确定的字符,这样我就可以重命名它们,但是我在某些时候不幸地失败了.示例文件是:

马修斯203-34510033_20220217111125(237).wav

乞讨中的名称以及括号内的值将在每个文件上增加,很快将大于3位数。我需要删除括号前的6位数字,我的regex可以正确地找到它们:

代码语言:javascript
复制
s/.*_203.*_202\d{5}\K.+?(?=\()//

正则表达式

我使用以下脚本来重命名文件:

代码语言:javascript
复制
#!/bin/bash
for filename in *.wav; do
  newFilename=$(sed -E 's/.*_203.*_202\d{5}\K.+?(?=\()//' <<< "$filename")
  mv "$filename" "$newFilename"
done

当我运行脚本时,我接收到输出:

代码语言:javascript
复制
sed: -e expression #1, character 46: Invalid Preceding regular expression.

我的苏醒怎么了?

编辑:

第四只鸟给出的解决方案有效: newFilename=$(sed -E 's/(_203.*_2020-9{5})0-9+(()/\1\2/‘<<< "$filename")

EN

回答 2

Stack Overflow用户

发布于 2022-02-22 14:51:22

如果要匹配括号之间的模式,则(?=.)不支持语法。你的模式可能会变成

代码语言:javascript
复制
s/.*_203.*_202[0-9]{5}.+?\(([^\)]+)\)/\1/
票数 0
EN

Stack Overflow用户

发布于 2022-02-22 15:06:48

如果您使用基于Perl的rename命令:

代码语言:javascript
复制
$ 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位数字。

代码语言:javascript
复制
rename -n 's/\d{6}(?=\()//' *.wav

如果没有安装命令,请检查发行版的存储库,或者可以通过元潘: File::Rename安装它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71223179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档