0

我正在尝试从 Web 链接中删除 URL

例如,我想把 http://site.com/path/to/site.html打印出来 'site.com' 或 'http://site.com'

这是我能想到的最接近的,但它不能正常工作:

echo "https://site.com/shisad/sadh" | sed -n "s/.*\(http.*\/\).*/\1/p"

打印: https ://site.com/shisad/

我认为这是我对特殊字符“/”做错了。有什么想法吗?

4

3 回答 3

2
  1. 当您sed用于匹配路径名或其他包含斜杠的模式时,请使用斜杠以外的字符来分隔正则表达式;它使生活变得更轻松。

  2. .*模式是贪婪的;它匹配最长的字符串。你想要一个更受约束的表达式。

要打印出来http://site.com,您可以使用:

sed -n 's%.*\(https\{0,1\}://[^/]*\).*%\1%p'

要打印出来site.com,您可以使用:

sed -n 's%.*https\{0,1\}://\([^/]*\)/.*%\1%p'

如果您认为您的站点可能在主机名后没有斜杠(因此输入仅包含http://site.com),那么您可以使用:

sed -n -e 's%.*https\{0,1\}://\([^/]*\)/.*%\1%p' \
       -e 's%.*https\{0,1\}://\([^/]*\)$%\1%p'

请注意,这些接受各种标点符号为“有效”;[-a-zA-Z0-9_.]*如果您希望使用,也许可以代替[^/]*- 但要注意国际化域名,您可以更具辨别力。两种模式版本不会在 URL 后的空白处停止;它将包括(http://example.com). 这是关于哪些字符有效这一点的推论。

于 2012-08-23T05:26:33.987 回答
1
echo "https://site.com/shisad/sadh"|awk -F/ '{print $1"//"$2$3}'
于 2012-08-23T05:31:52.290 回答
0

我假设你正在使用GNU sed.

echo "https://site.com/shisad/sadh" | sed -r 's%.*(https://[^/]*).*%\1%'
https://site.com

要仅获取域名,您可以简单地更改存储括号的位置:

echo "https://site.com/shisad/sadh" | sed -r 's%.*https://([^/]*).*%\1%'
site.com

你当然可以用一个简单的 perl 做你想做的事grep

echo "https://site.com/shisad/sadh" | grep -oP 'https://[^/]*'
https://site.com
于 2012-08-23T05:26:46.863 回答