使用sed和regex捕获url的最后一部分

时间:2012-03-07 17:42:35

标签: regex linux bash

我正在尝试将sed匹配到url的最后一部分并输出。例如:

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

应该给出输出:

file.mp3

到目前为止,我已尝试sed 's|\([^/]+mp3\)$|\1|g',但它只输出整个网址。也许有些东西我在这里看不到,但无论如何,帮助将非常感激!

4 个答案:

答案 0 :(得分:13)

这有效:

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

答案 1 :(得分:7)

basename是你的好朋友。

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

答案 2 :(得分: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

答案 3 :(得分:2)

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

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