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