Bash de número de string Regex

Bash de número de string Regex

Eu tenho esta situação:

$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

se o arquivo não começar com números, tudo funcionará.

$FILE_NAME = 'Skyfall.2012.iTA-ENG.Bluray.1080p.x264.mkv'

Result: Skyfall

Preciso disso para extrapolar automaticamente o nome do filme e remover todo o resto após o ano

Pode ajudar a consertar isso?

Responder1

No primeiro exemplo, .[0-9].*corresponde a qualquer caractere, depois a um dígito e depois a qualquer coisa, portanto corresponde à linha inteira e a substitui por nada.

No segundo exemplo, não corresponde Skyfall, corresponde ao primeiro ponto e a um dígito (ou seja, 2) e tudo o que vem depois, então tudo, desde um caractere antes de um dígito até o final da linha, é substituído por nada.

Você deveria usar:

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

isso removerá o primeiro ponto seguido por 1 ou mais dígitos e tudo depois sem nada.

Responder2

Isso deve funcionar:

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

Exemplo:

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

informação relacionada