2012-03-07 15 views
5

我想让sed匹配url的最后部分并输出。例如:使用sed和正则表达式来捕获url的最后部分

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

应该给输出:

file.mp3

到目前为止,我已经试过sed 's|\([^/]+mp3\)$|\1|g',但它只是输出整个URL。也许有什么我不在这里看到,但无论如何,帮助将不胜感激!

回答

11

这个工程:

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

谢谢!这解决了它:) – glindste 2012-03-07 17:45:52

+2

你能详细说明它的功能吗? – nass 2015-04-23 15:45:27

3

这应该做的工作:

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

其中:

  • |已经被用来代替/s命令的参数分开。
  • 如果在最后的/后发现任何东西都匹配并替换。

编辑:您还可以使用bash parameter substitution功能:

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

basename是你的好朋友。

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

这真的很有用,谢谢:) – glindste 2012-03-07 17:56:12

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

下面是使用grep另一种解决方案。