% 合計 % 受信 % Xferd 平均速度時間時間時間現在 Dload アップロード総費用 左速度 100277100174100103464274 --:--:-- --:--:-- --:--:-- 第736話ES_7PBXiq5gg67u9Vr","完了率":0.0,"状態":"inProg res"},"meta":{"requestId":"************************","httpStatus":"200 - 「いいね!」}}
ES_で始まる強調表示された部分を抽出する必要があります。
使ってみよう
curl <...> | sed '"progressId"\:"(ES_[A-Za-z0-9]{15})'
ただし、出力全体を環境変数に保存します。
答え1
jsonを解析するには、json解析ツールを使用することをお勧めします。jq
人気なのです。
set -o pipefail # if supported by your shell
var=$(curl -s "$url" | jq -r .result.progressId) || exit
または:
json=$(curl -s "$url") || exit
var=$(printf '%s\n' "$json" | jq -r .result.progressId) || exit
(これにより、後でそのjsonデータからより多くの情報を抽出できます。)
答え2
これは働きます:
curl <...> | sed -E -n 's/.*(ES[^"]+).+/\1/p'
説明する:
.*
「すべての文字が0回以上」を意味します。ES[^"]+
「ES」の後に「1回以上」以外の文字が続くことを意味します。.+
「すべての文字が1回以上」を意味します。\1
「最初のグループ」を意味するので、その中に何がありますか?()
p
「一致する行だけを印刷」を意味します。
変数に保存するには、次のようにバックティック `を使用して保存します。
VAR="$(curl <...> | sed -E -n 's/.*(ES[^"]+).+/\1/p')"