正则表达式从链接获取网站名称?

时间:2014-07-24 14:30:05

标签: regex sed

我正在尝试从链接获取网站名称,例如,如果提供链接是

http://www.example.com/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip

我想从中获得www.example.com。这些链接数百个,因此手动工作毫无用处。因此,我正在使用sed

之类的东西来进行正则表达式

有人可以帮忙吗?

6 个答案:

答案 0 :(得分:4)

这可以做到:

sed -r 's|(.*://)?([^/]*).*|\2|' file

它处理包含和不包含http / ftp的所有网址...:

$ cat a
http://www.example.com/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip
www.example.com/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip

$ sed -r 's|(.*://)?([^/]*).*|\2|' a
www.example.com
www.example.com

答案 1 :(得分:2)

使用(GNU)grep:

grep -oP '(?<=//)[^/]*' <<<"$url"

我正在使用一个正面的lookbehind断言,它仅在perl兼容模式-P中可用。


(原始答案)

使用sed

sed 's#.*//\([^/]*\).*#\1#' <<<"$url"

答案 2 :(得分:1)

也试试这个,

$ sed 's/^http:\/\/\([^/]*\).*/\1/g' file
www.example.com

答案 3 :(得分:1)

您可以使用Perl模块URI::URL,而不是使用正则表达式。假设您的链接列表位于名为links的文件中,这将打印出所有主机名:

perl -MURI::URL -ne '$url = url $_; print $url->host' links

示例输入:

http://www.example.com/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip                                                                                                                               
http://www.other.example.org/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip                                                                                                                         
http://www.third.net/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip

输出:

www.example.com
www.other.example.org
www.third.net

答案 4 :(得分:0)

试试这个:/\/{2}(.*?)\//它会在//和/

之间找到任何内容

答案 5 :(得分:0)

使用 grep 实用程序,例如。

echo 'http://www.example.com/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip' | grep -o 'http://[a-zA-Z0-9.-]*/'