Expressão regular com sed

6
./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/ 
    
por Mausam Sinha 06.03.2017 / 06:30

2 respostas

5

Por que não usar basename para isso? Por exemplo:

for file in *mp3; do basename "$file"; done
    
por 06.03.2017 / 09:01
11

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|.*/||'
    
por 06.03.2017 / 06:38

Tags