URL
스크립트에서 반환된 응답의 일부를 추출하려고 합니다 . 이는 나중에 스크립트에서 사용됩니다.curl
bash
컬 응답에는 다음 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 |
K Lookbehind 어설션을 사용하여 더 짧은 대안으로 일치 시작(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 |
K Lookbehind 어설션을 사용하여 더 짧은 대안으로 일치 시작(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