Fiesta de número de cadena de expresiones regulares

Fiesta de número de cadena de expresiones regulares

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

información relacionada