使用 POSIX 提取 git url 的域
Extracting git url's domain with POSIX
我正在尝试构建最可靠的方法来从 git 存储库中提取域。
对于像这样的网址:
ssh://git@gitlab.com:22411/usage/project_100.git
git://example.org/path/to/repo.git
https://github.com/example/foobar.git
http://github.com/example/foobar.git
ssh://user@host.com/path/to/repo.git
git://host.com/path/to/repo.git
我可以使用:
echo $url | awk -F[/:] '{print }'
但是对于像这样的回购:
"git@github.com:User/UserRepo.git"
不行。但以下内容确实如此:
echo $url | awk -v FS="(@|:)" '{print }'
是否有一些可靠的方法可以让我始终提取 POSIX 中的域?
您可以使用 sed
轻松做到这一点。
echo $url | sed -E 's/.*\:\/\/(.*)@?.*\:.*/ /' | awk -F@ '{print }'
Perl 版本:
perl -pe 's{.*//([^/]+@)?([^:/]+).*}{}' input-file
如果 URL 包含 ://
,您知道要删除协议,然后从第一个 /
开始删除所有内容。否则,如果它包含 @
,则假定它是您的第二种情况,并删除包括 @
在内的所有内容,然后删除从 :
开始的所有内容。其他情况可以根据需要添加。
url="..."
case $url in
*://*)
domain=${url#*://}
domain=${domain#*@}
domain=${domain%%/*}
;;
*@*:*)
domain=${url#*@}
domain=${domain%%:*}
;;
esac
用sed。我从 s///
切换到 s|||
。
sed 's|.*//||; s|.*@||; s|/.*||; s|:.*||' file
输出:
gitlab.com
example.org
github.com
github.com
host.com
host.com
我正在尝试构建最可靠的方法来从 git 存储库中提取域。 对于像这样的网址:
ssh://git@gitlab.com:22411/usage/project_100.git
git://example.org/path/to/repo.git
https://github.com/example/foobar.git
http://github.com/example/foobar.git
ssh://user@host.com/path/to/repo.git
git://host.com/path/to/repo.git
我可以使用:
echo $url | awk -F[/:] '{print }'
但是对于像这样的回购:
"git@github.com:User/UserRepo.git"
不行。但以下内容确实如此:
echo $url | awk -v FS="(@|:)" '{print }'
是否有一些可靠的方法可以让我始终提取 POSIX 中的域?
您可以使用 sed
轻松做到这一点。
echo $url | sed -E 's/.*\:\/\/(.*)@?.*\:.*/ /' | awk -F@ '{print }'
Perl 版本:
perl -pe 's{.*//([^/]+@)?([^:/]+).*}{}' input-file
如果 URL 包含 ://
,您知道要删除协议,然后从第一个 /
开始删除所有内容。否则,如果它包含 @
,则假定它是您的第二种情况,并删除包括 @
在内的所有内容,然后删除从 :
开始的所有内容。其他情况可以根据需要添加。
url="..."
case $url in
*://*)
domain=${url#*://}
domain=${domain#*@}
domain=${domain%%/*}
;;
*@*:*)
domain=${url#*@}
domain=${domain%%:*}
;;
esac
用sed。我从 s///
切换到 s|||
。
sed 's|.*//||; s|.*@||; s|/.*||; s|:.*||' file
输出:
gitlab.com example.org github.com github.com host.com host.com