2012-03-07 9 views
5

Estoy tratando de hacer que sed coincida con la última parte de una url y salir solo eso. Por ejemplo:Usando sed y expresiones regulares para capturar la última parte de la url

echo "http://randomurl/suburl/file.mp3" | sed (expression)

debe dar la salida:

file.mp3

Hasta ahora he intentado sed 's|\([^/]+mp3\)$|\1|g' pero simplemente da salida a toda la url. Tal vez hay algo que no estoy viendo aquí pero de todos modos, ¡la ayuda sería muy apreciada!

Respuesta

11

esto funciona:

echo "http://randomurl/suburl/file.mp3" | sed 's#.*/##' 
+0

¡Gracias! Eso lo resolvió :) – glindste

+2

¿Podría explicarnos más sobre lo que hace? – nass

3

Esto debería hacer el trabajo:

$ echo "http://randomurl/suburl/file.mp3" | sed -r 's|.*/(.*)$|\1|' 
file.mp3 

donde:

  • | se ha utilizado en lugar de / para separar los argumentos del comando s .
  • Todo se empareja y se reemplaza con lo que sea si se encuentra después de la última /.

Editar: También es posible usar fiesta parameter substitution capacidades:

$ url="http://randomurl/suburl/file.mp3" 
$ echo ${url##*/} 
file.mp3 
6

basename es su buen amigo.

> basename "http://randomurl/suburl/file.mp3" 
=> file.mp3 
+0

Eso es realmente útil, gracias :) – glindste

2
echo 'http://randomurl/suburl/file.mp3' | grep -oP '[^/\n]+$' 

Aquí hay otra solución utilizando grep.

Cuestiones relacionadas