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回以上(最大限多く一致))

変数に代入するにはどうすればいいかわかりますように=)

おすすめ記事