行でパラメータと値を取得する方法

行でパラメータと値を取得する方法

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/'

行検索と値キャプチャ部分では整数値のみを受け入れます。

おすすめ記事