sed正規表現は()を使用して拡張子なしでファイル名を取得します。

sed正規表現は()を使用して拡張子なしでファイル名を取得します。

私はロープを持っています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

関連情報