我有这个
$ cat test.sh
echo "https://bitbucket.dev.global.server.com/scm/xyz/abd.git"
echo "ssh://[email protected]:6699/xyz/abc.git"
echo "http://bitbucket.dev.global.server.com/abc"
echo "ssh://[email protected]/xyz/abc"
echo "http://bitbucket.dev.global.server.com"
echo "ssh://[email protected]/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
[email protected]
bitbucket.dev.global.server.com
[email protected]
bitbucket.dev.global.server.com
[email protected]
它仍然有用户和@符号。如何做到这一点?
由于您请求
sed
一行代码,您可以尝试以下操作:输出如下内容:
解释:
尝试一下,使用
perl
类似sed
语法:正则表达式匹配如下:
.*
://
(?:
\w+
@
)?
(
[\w.]+
)
/?
.*
或使用
GNU grep
inPCRE
模式:正则表达式匹配如下:
://
(?:
\w+
@
)?
\K
K
ept 是什么)作为使用后视断言的更短替代方法:环顾四周并支持正则表达式中的 \K[\w.]+
(?>
=/
)?
产量:
您可以这样做:
解释:
/
我们在末尾添加了一个以保持一致的格式grep
制定了模式/
/
/
/
/
/
字符