Paul
Paul

Reputation: 4452

Bash extract project name from url github

I have the following code:

url='https://github.com/Project/name-app.git'
echo $url

I have to get this back to me, i.e. the name of the project regardless of the owner of the project.

Result:

name-app

Upvotes: 1

Views: 880

Answers (4)

ufopilot
ufopilot

Reputation: 3985

# my prefered solution
url='https://github.com/Project/name-app.git' 
basename $url .git
> name-app

# others
sed 's/\(.*\/\)\([^\/]*\)\.\(\w*\)$/\2/g'  <<<$url
1.https://github.com/Project/ 
2.name-app 
#
awk -F"[/.]" '{print $(NF-1)}' <<<$url
awk -F"[/.]" '{print $6}' <<<$url
tr '/.' '\n' <<<$url|tail -2|grep -v git

Upvotes: 2

RavinderSingh13
RavinderSingh13

Reputation: 133640

1st solution: With your shown samples please try following awk code.

echo $url | awk -F'\\.|/' '{print $(NF-1)}'

OR to make sure last value is always ending with .git try a bit tweak in above code:

echo "$url" | awk -F'\\.|/' '$NF=="git"{print $(NF-1)}'


2nd solution: Using sed try following:

echo "$url" | sed 's/.*\///;s/\..*//'

Upvotes: 2

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 627103

You can use string manipulation in Bash:

url='https://github.com/Project/name-app.git'
url="${url##*/}" # Remove all up to and including last /
url="${url%.*}"  # Remove up to the . (including) from the right
echo "$url"
# => name-app

See the online Bash demo.

Another approach with awk:

url='https://github.com/Project/name-app.git'
url=$(awk -F/ '{sub(/\..*/,"",$NF); print $NF}' <<< "$url")
echo "$url"

See this online demo. Here, the field delimiter is set to /, the last field value is taken and all after first . is removed from it (together with the .), and that result is returned.

Upvotes: 5

Saboteur
Saboteur

Reputation: 1428

You can use grep regexp:

url='https://github.com/Project/name-app.git'
echo $url | grep -oP ".*/\K[^\.]*"

You can use bash expansion:

url='https://github.com/Project/name-app.git'
mytemp=${url##*/}
echo ${mytemp%.*}

Upvotes: 2

Related Questions