我正在尝试从网络链接中删除网址
比如说,我想把http://site.com/path/to/site.html打印出'site.com'或'http://site.com'
这是我能找到的最接近的但是它无法正常工作:
echo "https://site.com/shisad/sadh" | sed -n "s/.*\(http.*\/\).*/\1/p"
我认为这个特殊字符'/'我做错了。任何想法?
答案 0 :(得分:2)
当您使用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)
的右括号。这是关于哪些字符有效的一个必然结果。
答案 1 :(得分:1)
echo "https://site.com/shisad/sadh"|awk -F/ '{print $1"//"$2$3}'
答案 2 :(得分: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