Tu principal problema es que estás tratando de usar /
como separador, cuando /
también es un carácter que estarás analizando.
Deberá usar un separador diferente, como una tubería. Haz coincidir todo y un /
, luego usa \(
y \)
(grupos de captura) delimitando la parte que desea extraer, y use \1
, representando ese grupo:
echo "yourstring" | sed 's|.*/\([^/]*\)$|\1|'
Puede tenerlo funcionando sin grupos de captura:simplemente soltando todo hasta el último /
:
echo "yourstring" | sed 's|.*/||'
¿Por qué no usar basename
? ¿para esto? Por ejemplo:
for file in *mp3; do basename "$file"; done