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
誰もが私が何を逃しているのか、どのように解決できるのか教えていただけますか?
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 |
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