我正在尝试从 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"
我认为这是我对特殊字符“/”做错了。有什么想法吗?
我正在尝试从 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"
我认为这是我对特殊字符“/”做错了。有什么想法吗?
当您sed
用于匹配路径名或其他包含斜杠的模式时,请使用斜杠以外的字符来分隔正则表达式;它使生活变得更轻松。
.*
模式是贪婪的;它匹配最长的字符串。你想要一个更受约束的表达式。
要打印出来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)
. 这是关于哪些字符有效这一点的推论。
echo "https://site.com/shisad/sadh"|awk -F/ '{print $1"//"$2$3}'
我假设你正在使用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