首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:从URL字符串中提取方案和主机部分

Bash:从URL字符串中提取方案和主机部分
EN

Stack Overflow用户
提问于 2016-11-06 20:44:46
回答 2查看 3.2K关注 0票数 3

我需要从一个给定的字符串中删除url。我唯一的解决办法是:

代码语言:javascript
复制
_url="http://download.enlightenment.org/rel/apps/econnman/econnman-1.1.tar.gz"
_l=${_url%.*/*}        #  http://download.enlightenment
_l=${#_l}              #  29
_url=${_url:0:${l}+4}  #  http://download.enlightenment.org

但这将失败在每3个字符长度TLD,这是错误的方式。

经常这样。

EN

回答 2

Stack Overflow用户

发布于 2016-11-06 21:40:35

您可以使用grep

代码语言:javascript
复制
 $ echo "$_url" | grep -Eo '^http[s]?://[^/]+'
 http://download.enlightenment.org

您可以在正则表达式中使用expr

代码语言:javascript
复制
$ echo `expr "$_url" : '\(http://[^/]*\)'`
http://download.enlightenment.org

或者,使用awk

代码语言:javascript
复制
echo "$_url" | awk -F/ 'BEGIN{OFS=FS} {print $1 OFS OFS $3}'
http://download.enlightenment.org

您可以使用cut

代码语言:javascript
复制
echo "$_url" | cut -d/ -f1-3
http://download.enlightenment.org

cut可能也是获取其余url的最容易的方法:

代码语言:javascript
复制
$ echo "$_url" | cut -d/ -f4-
rel/apps/econnman/econnman-1.1.tar.gz

或者,完全内在的巴什:

代码语言:javascript
复制
 $ [[ $_url =~ ^([^:]+://[^/]+)/?(.*)$ ]] && server="${BASH_REMATCH[1]}"
 $ echo "$server"
 http://download.enlightenment.org

"${BASH_REMATCH[2]}"拥有其余的网址。

票数 6
EN

Stack Overflow用户

发布于 2016-11-06 21:14:49

我不知道这是否适用于bash,但它适用于pcre regex引擎。

代码语言:javascript
复制
(?<=:\/\/)(.*)(?=\/)

查找第一个/和第二个/之间的所有文本。为https://google.com/工作,但不适用于google.com/https://google.com。取决于你需要什么。

Regex 101

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40454336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档