我正在尝试从链接获取网站名称,例如,如果提供链接是
http://www.example.com/Something/SomethingElse/SomethingUnwanted/Usefulthing.zip
我想从中获得www.example.com
。这些链接数百个,因此手动工作毫无用处。因此,我正在使用sed
。
有人可以帮忙吗?
答案 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.-]*/'