
Tengo esta situación:
$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
Si el archivo no comienza con números, entonces todo funciona.
$FILE_NAME = 'Skyfall.2012.iTA-ENG.Bluray.1080p.x264.mkv'
Result: Skyfall
Necesito esto para extrapolar automáticamente el nombre de la película y eliminar todo lo demás después del año.
¿Puede ayudar a solucionar este problema?
Respuesta1
En el primer ejemplo, .[0-9].*
coincide con cualquier carácter, luego un dígito y luego cualquier cosa, por lo que coincide con toda la línea y la reemplaza por nada.
En el segundo ejemplo, no coincide Skyfall
, coincide con el primer punto y un dígito (es decir 2
, ) y todo lo que sigue, por lo que todo, desde un carácter antes de un dígito hasta el final de la línea, se reemplaza por nada.
Deberías usar:
s/\.[0-9]\+.*$//
esto eliminará el primer punto seguido de 1 o más dígitos y todo lo que sigue sin nada.
Respuesta2
Esto debería funcionar:
s/[0123456789.]*([^.]*).*/\1/
Ejemplo:
# echo $FILE_NAME | sed -E 's/[0123456789.]*([^.]*).*/\1/'
Skyfall