如何从Git克隆URL中提取服务器名称(Sed命令实现)
提取URL中的服务器名称(Sed命令实现)
场景与需求
现有test.sh脚本内容如下:
$ cat test.sh echo "https://bitbucket.dev.global.server.com/scm/xyz/abd.git" echo "ssh://git@bitbucket.dev.global.server.com:6699/xyz/abc.git" echo "http://bitbucket.dev.global.server.com/abc" echo "ssh://user@bitbucket.dev.global.server.com/xyz/abc" echo "http://bitbucket.dev.global.server.com" echo "ssh://user@bitbucket.dev.global.server.com/xyz/abc.git"
需要一条单行命令(优先使用Sed)从这些URL中提取服务器名称,预期输出:
bitbucket.dev.global.server.com
尝试过的命令及问题
执行以下命令后,输出仍保留了用户名和@符号:
$ ./test.sh | sed 's/\(\/\/\|\@\)/&\n/;s/.*\n//;s/\(\:\|\/\)/\n&/;s/\n.*//' bitbucket.dev.global.server.com git@bitbucket.dev.global.server.com bitbucket.dev.global.server.com user@bitbucket.dev.global.server.com bitbucket.dev.global.server.com user@bitbucket.dev.global.server.com
解决方案
使用以下Sed命令即可实现需求:
./test.sh | sed -E 's/.*(ssh:\/\/|https?:\/\/|@)([^:@\/]+).*/\2/'
命令说明
-E:启用扩展正则表达式,减少转义符的使用.*(ssh:\/\/|https?:\/\/|@):匹配URL开头到ssh://、http:///https://或@的所有内容([^:@\/]+):捕获服务器名称,匹配除:、@、/之外的所有字符,这正是目标服务器域名.*:匹配服务器名称之后的剩余内容\2:将整行替换为第二个捕获组的内容,即提取到的服务器名称
执行后输出:
bitbucket.dev.global.server.com bitbucket.dev.global.server.com bitbucket.dev.global.server.com bitbucket.dev.global.server.com bitbucket.dev.global.server.com bitbucket.dev.global.server.com
内容的提问来源于stack exchange,提问作者Ramanan T
相关产品推荐
相关产品推荐

