
나는 이런 상황에 처해 있습니다 :
$FILE_NAME = '207.Skyfall.2012.iTA-ENG.Bluray.1080p.x264.mkv'
echo $FILE_NAME | sed 's/.[0-9].*//' | sed 's/\./ /g'
Result empty the regex remove all
파일이 숫자로 시작하지 않으면 모든 것이 작동합니다.
$FILE_NAME = 'Skyfall.2012.iTA-ENG.Bluray.1080p.x264.mkv'
Result: Skyfall
영화 이름을 자동으로 추정하고 연도 이후의 다른 모든 항목을 제거하려면 이것이 필요합니다.
이 문제를 해결하는 데 도움이 될 수 있나요?
답변1
첫 번째 예에서는 .[0-9].*
모든 문자, 숫자, 그 다음 모든 항목과 일치하므로 전체 줄과 일치하고 아무것도 없는 것으로 바꿉니다.
두 번째 예에서는 일치하지 않으며 Skyfall
첫 번째 점과 숫자(예: 2
) 및 그 이후의 모든 항목과 일치하므로 숫자 앞의 문자부터 줄 끝까지의 모든 내용이 아무것도 대체되지 않습니다.
다음을 사용해야 합니다.
s/\.[0-9]\+.*$//
이렇게 하면 첫 번째 점과 1개 이상의 숫자가 제거되고 그 이후에는 아무 것도 제거되지 않습니다.
답변2
이것은 작동합니다:
s/[0123456789.]*([^.]*).*/\1/
예:
# echo $FILE_NAME | sed -E 's/[0123456789.]*([^.]*).*/\1/'
Skyfall