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

관련 정보