Извлечение домена git url с помощью POSIX - PullRequest
1 голос
/ 06 января 2020

Я пытаюсь создать самый надежный способ извлечь домен из репо git. Для URL-адресов, таких как:

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 $4}'

Но для репозиториев, таких как:

"git@github.com:User/UserRepo.git"

Это не будет работать. Но следующее делает:

echo $url | awk -v FS="(@|:)" '{print $2}'

Есть ли какой-нибудь надежный способ, которым я всегда могу извлечь домен в POSIX?

Ответы [ 4 ]

2 голосов
/ 06 января 2020

С сед. Я переключился с s/// на s|||.

sed 's|.*//||; s|.*@||; s|/.*||; s|:.*||' file

Выход:

gitlab.com
example.org
github.com
github.com
host.com
host.com
2 голосов
/ 06 января 2020

Если URL содержит ://, вы знаете, что отбрасывать протокол, а затем отбрасывать все, начиная с первого / и далее. В противном случае, если он содержит @, предположим, что это ваш второй случай, и отбросьте все до @, включая все, начиная с : и далее. Другие случаи могут быть добавлены по мере необходимости.

url="..."
case $url in
  *://*)
    domain=${url#*://}
    domain=${domain#*@}
    domain=${domain%%/*}
    ;;
  *@*:*)
    domain=${url#*@}
    domain=${domain%%:*}
    ;;
 esac
1 голос
/ 06 января 2020

Perl версия:

perl -pe 's{.*//([^/]+@)?([^:/]+).*}{$2}' input-file
0 голосов
/ 06 января 2020

Вы можете сделать это с помощью sed легко.

echo $url | sed -E 's/.*\:\/\/(.*)@?.*\:.*/\1 /' | awk -F@ '{print $1}'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...