Ihr Hauptproblem ist, dass Sie versuchen, / zu verwenden als Trennzeichen, wenn / ist auch ein Zeichen, das Sie analysieren werden.
Sie müssen ein anderes Trennzeichen verwenden, z. B. ein Rohr. Passen Sie alles und einen / an , dann verwenden Sie \( und \) (Erfassungsgruppen), indem Sie den Teil abgrenzen, den Sie extrahieren möchten, und verwenden Sie \1 , wobei diese Gruppe gerendert wird:
echo "yourstring" | sed 's|.*/\([^/]*\)$|\1|'
Möglicherweise funktioniert es ohne Erfassungsgruppen:Einfach alles bis zum letzten / fallen lassen :
echo "yourstring" | sed 's|.*/||'
Warum nicht basename verwenden dafür? Zum Beispiel:
for file in *mp3; do basename "$file"; done