sed regex 使用 () 获取不带扩展名的文件名

sed regex 使用 () 获取不带扩展名的文件名

我有一根绳子GameOfThronesS01E05.mkv。我想与正则表达式GameOfThronesS01E05一起使用sed

我试过

echo GameOfThronesS01E05.mkv | sed 's/\(.+\)\.mkv$/\1/'

但没用

答案1

如果您使用的系统具有 GNU 实用程序,则始终可以使用basename来剥离扩展名:

$ basename -s ".mkv" GameOfThronesS01E05.mkv                                                          
GameOfThronesS01E05

除此之外,Python 也始终是一个不错的选择:

$ python -c 'import sys;print sys.argv[1][:-4]' GameOfThronesS01E05.mkv                               
GameOfThronesS01E05

答案2

这是一个更简单的解决方案:

echo GameOfThronesS01E05.mkv | sed -n 's/.mkv//p'

答案3

谢谢@don_crissti。这是我的 MKV 到 MP4 转换器

$vi /usr/local/bin/MKVtoMP4
for entry in *
do
        if [[ $entry =~ .+\.mkv$ ]]; then
                FILENAME=`echo $entry | sed -E 's/(.+)\.mkv$/\1/'`
                ffmpeg -i "$entry" -codec copy "${FILENAME}.mp4"
        fi
done
chmod ug+x /usr/local/bin/MKVtoMP4

相关内容