Gegeben JEDE GitHub-Repository-URL-Zeichenfolge wie:
git://github.com/some-user/my-repo.git
oder
git@github.com:some-user/my-repo.git
oder
https://github.com/some-user/my-repo.git
Wie kann bash
der Repository-Name am besten my-repo
aus einer der folgenden Zeichenfolgen extrahiert werden ? Die Lösung MUSS für alle oben angegebenen Arten von URLs funktionieren.
Vielen Dank.
echo $(basename "$url" ".${url##*.}")
.Ich würde mitgehen
basename $URL .git
.quelle
Alter Beitrag, aber ich hatte kürzlich das gleiche Problem.
Die Regex
^(https|git)(:\/\/|@)([^\/:]+)[\/:]([^\/:]+)\/(.+).git$
funktioniert für die drei Arten von URLs.Erklärung ( siehe in Aktion auf Regex101 ):
^
entspricht dem Anfang einer Zeichenfolge(https|git)
passt und erfasst die Zeichenhttps
odergit
(:\/\/|@)
passt und erfasst die Zeichen://
oder@
([^\/:]+)
stimmt mit einem oder mehreren Zeichen überein und erfasst diese, die weder/
noch sind:
[\/:]
entspricht einem Zeichen, das/
oder ist:
([^\/:]+)
Stimmt mit einem oder mehreren Charakteren überein und erfasst diese, die/
noch:
nicht vorhanden sind[\/:]
passt zum Charakter/
(.+)
stimmt mit einem oder mehreren Zeichen überein und erfasst diese.git
Streichhölzer ....git
im wahrsten Sinne des Wortes$
entspricht dem Ende einer ZeichenfolgeDies ist
[email protected]:some-user/my-repo.git
alles andere als perfekt, da so etwas passen würde, aber ich denke, es ist gut genug für die Extraktion.quelle
.git
am Ende keine .Zusammenfassen:
URL ohne (optionales) Suffix abrufen:
Repository-Namen abrufen:
Holen Sie sich anschließend den Namen des Benutzers (Hosts):
quelle
Verwenden Sie den regulären Ausdruck:
/([^/]+)\.git$/
quelle
quelle
Basisname ist mein Favorit, aber Sie können auch verwenden
sed
:"sed" löscht den gesamten Text bis zum letzten
/
+ der.git
Erweiterung (falls vorhanden) und behält die Übereinstimmung der Gruppe bei,\1
die alles außer Punkt ist([^.]+)
quelle