正規表示式 字串 數字 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]\+.*$//

這將刪除第一個點,後面跟著一個或多個數字,然後刪除所有內容。

答案2

這應該有效:

s/[0123456789.]*([^.]*).*/\1/

例子:

# echo $FILE_NAME | sed -E 's/[0123456789.]*([^.]*).*/\1/'
Skyfall

相關內容