bash 스크립트의 컬 응답에서 URL의 일부를 추출하는 방법은 무엇입니까?

bash 스크립트의 컬 응답에서 URL의 일부를 추출하는 방법은 무엇입니까?

URL스크립트에서 반환된 응답의 일부를 추출하려고 합니다 . 이는 나중에 스크립트에서 사용됩니다.curlbash

컬 응답에는 다음 URL이 있습니다.

https://www.example.com/1234/text/111?x=999988

text/111?x=999988이제 나는 그것에서 추출 하고 싶습니다 . 또한 숫자를 111변수에 저장하고 싶습니다 . 나는 이것을하려고 노력하고있다.

#!/bin/bash

sample_link="https://www.example.com/1234/text/111?x=999988"
sample_extract=${sample_link##*/}
echo "$sample_extract"

하지만 이건 나에게만 주는 거야111?x=999988

누구든지 내가 무엇을 놓치고 있는지, 어떻게 해결할 수 있는지 말해 줄 수 있나요?

추신: 누락된 정보가 있으면 알려주세요.

답변1

그리고 GNU grep:

$ grep -oP 'https://[^/]+/\d+/\K.*' <<< 'https://www.example.com/1234/text/111?x=999988'
text/111?x=999988

또는

그리고 Perl:

$ perl -nE 'say $& if m@https://[^/]+/\d+/\K.*@' <<< 'https://www.example.com/1234/text/111?x=999988'a
text/111?x=999988a

정규식 일치는 다음과 같습니다.

마디 설명하다
https:// 'https://'
[^/]+ 다음을 제외한 모든 문자: /(1회 이상(최대한 많이 일치))
/ /
\d+ 숫자(0~9)(1회 이상(최대한 많이 일치))
/ /
\K KLookbehind 어설션을 사용하여 더 짧은 대안으로 일치 시작(ept)을 재설정합니다 .주위를 둘러보세요그리고정규식에서 K 지원
.* \n을 제외한 모든 문자(0회 이상(최대한 많이 일치))

$ grep -oP 'https://[^/]+/\d+/\w+/\K\d+' <<< 'https://www.example.com/1234/text/111?x=999988'
111

또는

$ perl -nE 'say $& if m@https://[^/]+/\d+/\w+/\K\d+' <<< 'https://www.example.com/1234/text/111?x=999988'a
111

정규식 일치는 다음과 같습니다.

마디 설명하다
https:// 'https://'
[^/]+ 다음을 제외한 모든 문자: /(1회 이상(최대한 많이 일치))
/ /
\d+ 숫자(0~9)(1회 이상(최대한 많이 일치))
/ /
\w+ 단어 문자(az, AZ, 0-9, _)(1회 이상(최대한 많이 일치))
/ /
\K KLookbehind 어설션을 사용하여 더 짧은 대안으로 일치 시작(ept)을 재설정합니다 .주위를 둘러보세요그리고정규식에서 K 지원
\d+ 숫자(0~9)(1회 이상(최대한 많이 일치))

변수에 할당하려면 어떻게 해야 하는지 아시는 것 같습니다 =) (귀하의 원본 게시물에 어떻게 하는지 나와 있습니다)

답변2

URL의 일부를 추출하고 싶지만 그 일부만 변수에 저장하고 싶다고 말합니다.

아무 작업도 수행하지 않고 값의 일부를 추출하면 출력하려는 ​​경우가 아니면 값이 추가되지 않습니다.

response='https://www.example.com/1234/text/111?x=999988'
echo "tail is $(grep -o '[^/]*/[^/]*?.*' <<<"$response")"

산출

tail is text/111?x=999988    

마지막 부분을 변수에 넣으려면 다음을 수행하십시오.

response='https://www.example.com/1234/text/111?x=999988'
last=${response%\?*}
last=${last##*/}
echo "last is $last"

산출

last is 111

관련 정보