정규식 문자열 번호 bash

정규식 문자열 번호 bash

나는 이런 상황에 처해 있습니다 :

$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

관련 정보