我有这种情况:
$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