Home > Blockchain >  Bash extract project name from url github [duplicate]
Bash extract project name from url github [duplicate]

Time:09-30

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

CodePudding user response:

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.

CodePudding user response:

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%.*}

CodePudding user response:

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/\..*//'

CodePudding user response:

awk -F"[/.]" '{print $6}' <<<$url
basename $url|sed 's/\.git//'
tr '/.' '\n' <<<$url|tail -2|grep -v git
  • Related