Bash에서 http 링크의 마지막 부분을 얻는 방법은 무엇입니까?

Bash에서 http 링크의 마지막 부분을 얻는 방법은 무엇입니까?

http 링크가 있습니다:

http://www.test.com/abc/def/efg/file.jar 

file.jar의 마지막 부분을 변수에 저장하고 싶으므로 출력 문자열은 "file.jar"입니다.

건강 상태: 링크의 길이는 다양할 수 있습니다. 예:

http://www.test.com/abc/def/file.jar.

나는 이것을 시도했습니다 :

awk -F'/' '{print $7}'

, 그러나 문제는 URL의 길이이므로 모든 URL 길이에 대해 작동하는 명령이 필요합니다.

답변1

작동 awk하지만 곡사포로 사슴을 사냥하는 것과 약간 비슷합니다. URL이 이미 Naked인 경우 bash이를 쉘 변수에 넣고 내장된 매개변수 대체를 사용하여 원하는 작업을 수행하는 것이 매우 간단합니다.

$ myurl='http://www.example.com/long/path/to/example/file.ext'
$ echo ${myurl##*/}
file.ext

작동 방식은 "*/"와 일치하는 접두사를 제거하는 것입니다 ##. 이 연산자가 수행하는 작업은 다음과 같습니다.

${haystack##needle} # removes any matching 'needle' from the
                    # beginning of the variable 'haystack'

답변2

basename또한 dirnameURL에서도 작동합니다.

> url="http://www.test.com/abc/def/efg/file.jar"
> basename "$url"; basename -s .jar "$url"; dirname "$url"
file.jar
file
http://www.test.com/abc/def/efg

답변3

를 사용하면 awk,을 사용하여 $NF필드 수에 관계없이 마지막 필드를 가져올 수 있습니다.

awk -F / '{print $NF}'

문자열을 쉘 변수에 저장하는 경우 다음을 사용할 수 있습니다.

a=http://www.test.com/abc/def/efg/file.jar
printf '%s\n' "${a##*/}"

답변4

한 가지 방법은 revURL을 잘라낸 다음 rev필드를 자르는 것입니다. 예를 들어:

echo 'http://www.test.com/abc/def/efg/file.jar ' | rev | cut -d '/' -f 1 | rev

산출:

file.jar 

예 2:

echo 'http://www.test.com/abc/cscsc/sccsc/def/efg/file.jar ' | rev | cut -d '/' -f 1 | rev

산출:

file.jar

관련 정보