
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