![Bash에서 http 링크의 마지막 부분을 얻는 방법은 무엇입니까?](https://linux55.com/image/99351/Bash%EC%97%90%EC%84%9C%20http%20%EB%A7%81%ED%81%AC%EC%9D%98%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EB%B6%80%EB%B6%84%EC%9D%84%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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
또한 dirname
URL에서도 작동합니다.
> 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
한 가지 방법은 rev
URL을 잘라낸 다음 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