2012-03-07 11 views
5

Staram się, aby sed pasował do ostatniej części adresu URL i właśnie to generował. Na przykład:Używanie sed i regex do przechwytywania ostatniej części adresu URL

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

powinien dać wyjście:

file.mp3

tej pory próbowałam sed 's|\([^/]+mp3\)$|\1|g' ale po prostu wyprowadza cały URL. Może jest coś, czego nie widzę tutaj, ale tak czy inaczej, pomoc byłaby bardzo ceniona!

Odpowiedz

11

to działa:

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

Dziękujemy! To rozwiązało :) – glindste

+2

Czy mógłbyś rozwinąć to, co robi? – nass

3

To powinno załatwić sprawę:

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

gdzie:

  • | został użyty zamiast / oddzielić argumenty komendy s .
  • Wszystko zostanie dopasowane i zastąpione cokolwiek, jeśli zostanie znalezione po ostatnim /.

Edit: Można również użyć Bash parameter substitution możliwości:

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

basename jest twoim przyjacielem.

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

To naprawdę przydatne, dzięki :) – glindste

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

Oto kolejny rozwiązanie wykorzystujące grep.

Powiązane problemy