正規表現 文字列 数値 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].*任意の文字、数字、任意の文字の順に一致するため、行全体と一致し、何も置換されません。

2 番目の例では、 は一致せずSkyfall、最初のドットと数字 (つまり2) とその後のすべてに一致するため、数字の前の文字から行末までのすべてが何もないものに置き換えられます。

以下を使用する必要があります:

s/\.[0-9]\+.*$//

これにより、最初のドットとそれに続く 1 つ以上の数字が削除され、その後のすべてが削除されます。

答え2

これは動作するはずです:

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

例:

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

関連情報