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

誰もが私が何を逃しているのか、どのように解決できるのか教えていただけますか?

PS:欠落している情報があれば教えてください。

答え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

関連情報