sed regex для получения имени файла без расширения с помощью ()

У меня есть строка GameOfThronesS01E05.mkv . Я хочу GameOfThronesS01E05 , используя sed с регулярным выражением.

Я пробовал

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

, и это не сработало

0
10.02.2017, 19:30
3 ответа

Это более простое решение:

echo GameOfThronesS01E05.mkv | sed -n 's/.mkv//p'
0
28.01.2020, 02:46

Если вы используете систему, в которой есть утилиты GNU, вы всегда можете использовать basename , чтобы удалить расширение:

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

В противном случае python тоже всегда будет хорошим выбором:

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

Спасибо, @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
0
28.01.2020, 02:46

Теги

Похожие вопросы