我一直在努力改变这个
'Simple' week 1-117067638.mp3
进入这个
'Simple' week 1.mp3
然而,当我使用命令sed 's/\(-\).*\(.mp3\)//'
时,我得到了
'Simple' week 1
如何保留文件扩展名?如果你能解释一下你使用的命令,那将是很好的,这样我就可以从中学习,而不仅仅是得到一个答案。
答案 0 :(得分:1)
您不需要拥有捕获组。
$ echo "'Simple' week 1-117067638.mp3" | sed 's/-.*\.mp3/.mp3/g'
'Simple' week 1.mp3
OR
$ echo "'Simple' week 1-117067638.mp3" | sed 's/-.*\(\.mp3\)/\1/g'
'Simple' week 1.mp3
您的代码有什么问题?
sed 's/\(-\).*\(.mp3\)//'
sed会将所有匹配的字符替换为替换部分中的字符。因此\(-\).*\(.mp3\)
匹配-
到.mp3
的所有字符(您必须按顺序转义点以匹配文字点)。您正在用空字符串替换所有匹配的字符。所以.mp3
也被删除了。为了避免这种情况,请将.mp3
添加到替换部件中。
在基本sed中,捕获组由\(..\)
表示。此捕获组用于捕获稍后要引用的字符。
答案 1 :(得分:0)
此任务也可以在bash
中完成,无需调用sed
:
$ fname="'Simple' week 1-117067638.mp3"
$ fname="${fname/-*/}.mp3"
$ echo "$fname"
'Simple' week 1.mp3