
Ich habe diese Situation:
$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
wenn die Datei nicht mit Zahlen beginnt, funktioniert alles.
$FILE_NAME = 'Skyfall.2012.iTA-ENG.Bluray.1080p.x264.mkv'
Result: Skyfall
Ich brauche dies, um den Namen des Films automatisch zu extrapolieren und alles andere nach dem Jahr zu entfernen
Können Sie helfen, das Problem zu beheben?
Antwort1
Im ersten Beispiel .[0-9].*
wird ein beliebiges Zeichen abgeglichen, dann eine Ziffer und dann alles andere, sodass die ganze Zeile abgeglichen und durch nichts ersetzt wird.
Im zweiten Beispiel stimmt es nicht mit überein Skyfall
, sondern mit dem ersten Punkt und einer Ziffer (also 2
) und allem danach. Daher wird alles vom Zeichen vor einer Ziffer bis zum Zeilenende durch nichts ersetzt.
Du solltest benutzen:
s/\.[0-9]\+.*$//
dadurch wird der erste Punkt, gefolgt von einer oder mehreren Ziffern, und alles danach mit nichts entfernt.
Antwort2
Das sollte funktionieren:
s/[0123456789.]*([^.]*).*/\1/
Beispiel:
# echo $FILE_NAME | sed -E 's/[0123456789.]*([^.]*).*/\1/'
Skyfall