如何让 SED 删除连字符和文件扩展名之间的所有字符
How to have SED remove all characters between a hypen and the file extension
我一直在尝试更改此设置,但没有成功
'Simple' week 1-117067638.mp3
进入这个
'Simple' week 1.mp3
然而,当我使用命令 sed 's/\(-\).*\(.mp3\)//'
时,我得到
'Simple' week 1
如何保留我的文件扩展名?如果您能解释一下您使用的命令,那就太好了,这样我就可以从中学习,而不仅仅是得到答案。
您不需要捕获组。
$ echo "'Simple' week 1-117067638.mp3" | sed 's/-.*\.mp3/.mp3/g'
'Simple' week 1.mp3
或
$ echo "'Simple' week 1-117067638.mp3" | sed 's/-.*\(\.mp3\)//g'
'Simple' week 1.mp3
你的代码有什么问题?
sed 's/\(-\).*\(.mp3\)//'
sed 会将所有匹配的字符替换为替换部分中的字符。所以 \(-\).*\(.mp3\)
匹配从 -
到 .mp3
的所有字符(你必须需要转义点才能匹配文字点 )。您正在用空字符串替换所有匹配的字符。所以 .mp3
也被删除了。为了避免这种情况,请将 .mp3
添加到替换部分。
在基本 sed 中,捕获组由 \(..\)
表示。该捕获组用于捕获后面要引用的字符。
此任务也可以在 bash
中完成,无需调用 sed
:
$ fname="'Simple' week 1-117067638.mp3"
$ fname="${fname/-*/}.mp3"
$ echo "$fname"
'Simple' week 1.mp3
我一直在尝试更改此设置,但没有成功
'Simple' week 1-117067638.mp3
进入这个
'Simple' week 1.mp3
然而,当我使用命令 sed 's/\(-\).*\(.mp3\)//'
时,我得到
'Simple' week 1
如何保留我的文件扩展名?如果您能解释一下您使用的命令,那就太好了,这样我就可以从中学习,而不仅仅是得到答案。
您不需要捕获组。
$ echo "'Simple' week 1-117067638.mp3" | sed 's/-.*\.mp3/.mp3/g'
'Simple' week 1.mp3
或
$ echo "'Simple' week 1-117067638.mp3" | sed 's/-.*\(\.mp3\)//g'
'Simple' week 1.mp3
你的代码有什么问题?
sed 's/\(-\).*\(.mp3\)//'
sed 会将所有匹配的字符替换为替换部分中的字符。所以 \(-\).*\(.mp3\)
匹配从 -
到 .mp3
的所有字符(你必须需要转义点才能匹配文字点 )。您正在用空字符串替换所有匹配的字符。所以 .mp3
也被删除了。为了避免这种情况,请将 .mp3
添加到替换部分。
在基本 sed 中,捕获组由 \(..\)
表示。该捕获组用于捕获后面要引用的字符。
此任务也可以在 bash
中完成,无需调用 sed
:
$ fname="'Simple' week 1-117067638.mp3"
$ fname="${fname/-*/}.mp3"
$ echo "$fname"
'Simple' week 1.mp3