Регулярное выражение Строка Номер 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

Связанный контент