bash를 사용하여 URL에서 기본 파일 이름을 추출하십시오.


15
url=http://www.foo.bar/file.ext; echo ${url##/*}

이 코드가 인쇄 될 것으로 예상 file.ext했지만 전체 URL을 인쇄합니다. 왜? 파일 이름을 어떻게 추출합니까?


네, 잘못된 일이 일어날 것으로 예상됩니다. 잘 file.ext를 추출하고 싶습니다
ManuelSchneid3r

줄 끝을 자르려고합니까? 시도하십시오 dirname $url. 또는 grep -o 'http://[^/]*' <<<$url.
케빈

답변:


28

단어는자를 문자열과 일치해야하기 때문입니다. 다음과 같아야합니다.

url="http://www.foo.bar/file.ext"; echo "${url##*/}"

고마워, 로버트, 당신은 올바른 방향으로 나를 조종했다.


아, 우리는 동시에 그것을 알고 있습니다. 도움이되어 기쁘다.
derobert

10

맨 페이지를 인용하려면 :

${parameter##word}
   Remove matching prefix pattern.  The word is expanded to produce
   a pattern just as in pathname expansion.  If the pattern matches
   the  beginning of the value of parameter, […]

/*URL이 hnot로 시작하기 때문에 시작과 일치하지 않습니다 /.

당신이 찾고있는 것을하는 사소한 방법은 (의견에 따라)입니다 echo "$url" | rev | cut -d / -f 1 | rev. 그러나 물론 그것은 슬래시로 끝나는 URL에 흥미로운 결과를 줄 것입니다.

원하는 것을 수행하는 또 다른 방법은 패턴을 */대신 사용하는 것입니다.


수행해야 할 작업에 대한 설명을 제공했으며 맨 페이지의 인용문이 큰 도움이되었습니다. 그것은 많은 도움이되었습니다! 다시 감사합니다! :)
Fadi

6

basename(1) URL 과도 작동하므로 간단하게 수행 할 수 있습니다.

url=http://www.foo.bar/file.ext; basename $url

4

Bash Extended Globbing 도 참조하십시오. 이 경우 확장 글로브는 필수는 아닙니다.

 shopt -s extglob; url=http://www.foo.bar/file.ext; echo ${url##+(*/)}

산출: file.ext

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.