我正在将ls
传递给Perl,寻找包含任何字符的行,然后是" .mp4.mp3"在行尾。我想删除" .mp4"从中间线。这是我的命令:
ls | perl -pe 's|(.+?)\.mp4\.mp3$|\1\.mp3|'
我正在使用非贪婪的匹配,因此正则表达式会在遇到" .mp4.mp3"时停止使用该行。我希望这只能在以" .mp4.mp3"结尾的行上运行,但它在没有" .mp4"的行上运行。在他们身上。
输入:foo。 bar.mp4.mp3
预期输出:foo。 bar.mp3
答案 0 :(得分:3)
如果通过“在没有”.mp4“的行中操作”你的意思是你只想打印出替换发生变化的文件名,你需要不使用-p并明确打印你想要的那些:
ls | perl -wne'print if s/\.mp4\.mp3$/.mp3/'
答案 1 :(得分:1)
不要过度思考它:)
s/\.mp4\.mp3$/.mp3/
重命名Perl中的文件:
ls | perl -lne '($newname = $_ ) =~ s/\.mp4\.mp3$/.mp3/; rename($_, $newname)'