segment.bytes
パラメータとその値をキャプチャしたいと思います。
はい
echo "$info" | grep "segment.bytes"
{"version":1,"config":{"segment.bytes":"10737555","retention.bytes":"104857600"}}
私の考えは、値を含むが値を含まないすべての単語を削除してsegment.bytes
削除することです。segment.bytes
二重引用符
予想結果の例
echo "$info" | grep "segment.bytes" | ......
segment.bytes:10737555
私はこれを試してみます
echo "$info" | grep "segment.bytes" | sed s'/"/ /g' | sed 's/^.*segment.bytes/segment.bytes/' | awk '{print $1":"$3}
私は得る
segment.bytes:10737555
しかし、価値を得る結果が非常に高いので、私のアプローチは危険であると思います。鋭い重要なことは、間違った結果が得られることです。悲惨な
もっと信頼できる他のオプションがあるといいです。
ベストアンサー1
$info
次の呼び出しでsed
変数をパイプできます。
echo "$info" | sed -E '/"segment\.bytes"/s/.*"(segment\.bytes)":"([^"]+)".*/\1:\2/'
パターン付きの行を見つけ、文字列と"segment.bytes"
角segment.bytes
かっこ内の次の文字列("
単純化のために「しかし」と定義されています)をキャプチャグループ1と2に抽出し、「キャプチャグループ1」、「:」、および「キャプチャグループ」を印刷します。 2"。
(拡張正規表現を有効にするオプションはsed
バージョンによって異なる場合があります。POSIX-E
標準で、現在GNU、MacOS、およびBSDで動作しますsed
が、失敗した場合はEREページを有効にする方法のマニュアルを確認してください。)
もう少し選択的に試してください。
sed -E '/"segment\.bytes":"[0-9]+"/s/.*"(segment\.bytes)":"([0-9]+)".*/\1:\2/'
行検索と値キャプチャ部分では整数値のみを受け入れます。