Por que não usar basename
para isso? Por exemplo:
for file in *mp3; do basename "$file"; done
./Queen/(1986)/Innuendo/01.One vision.mp3
./Queen/(1986)/Innuendo/02.One vision.mp3
./Queen/(1986)/Innuendo/03.One vision.mp3
Eu quero exibir a linha acima como:
01.One vision.mp3
02.One vision.mp3
03.One vision.mp3
Eu tentei com:
sed -i 's/^[^.$/]/ /g/
Seu principal problema é que você está tentando usar /
como separador, quando /
também é um caractere que você estará analisando.
Você precisará usar um separador diferente, como um pipe. Combine tudo e um /
, use \(
e \)
(grupos de captura) delimitando a parte que você deseja extrair e use , renderizando esse grupo:
echo "yourstring" | sed 's|.*/\([^/]*\)$||'
Você pode tê-lo funcionando sem grupos de captura: apenas soltando tudo até o último /
:
echo "yourstring" | sed 's|.*/||'