
我有這樣的情況:
$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]\+.*$//
這將刪除第一個點,後面跟著一個或多個數字,然後刪除所有內容。
答案2
這應該有效:
s/[0123456789.]*([^.]*).*/\1/
例子:
# echo $FILE_NAME | sed -E 's/[0123456789.]*([^.]*).*/\1/'
Skyfall