
У меня такая ситуация:
$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