2つのパターン間の値の抽出

2つのパターン間の値の抽出

Ubuntuを使用していますが、2つのパターン間の値を抽出したいのに必要な文字列はファイルにありません。

私のデータは次のとおりです。

[{"rows":[{"_uuid":["uuid","11111-222-33333-4444444"]}]}]

,私は間にテキストをインポートしたいと思います。]これは私が欲しいことを意味します11111-222-33333-444444。これを行うにはどうすればよいですかsed

  1. Ubuntu私が使っているオペレーティングシステムです。
  2. どのファイルや変数にも保存されません。これはコマンドの出力です。 command1の出力をsedにパイプし、上記の文字列を解析して必要な情報のみを取得しようとしています。
  3. それにJSON滞在。これが私たちが得る唯一のデータです...

ベストアンサー1

使用してくださいjq(入力がコ​​ンパクトか複数行かは関係ありません)。

your-command | jq -r '.[0].rows[0]._uuid[1]'

JSONドキュメントはオブジェクトの配列であり、これらの最上位オブジェクトの最初のオブジェクトが必要です.[0]。オブジェクトにはrows配列が含まれており、最初の要素が必要です.rows[0]。その要素の名前が付けられた別の配列があり、_uuidその配列の2番目の要素が必要です._uuid[1]

-rデコードされた「生」データが取得されます。それ以外の場合-r(引用符で囲まれた)JSON文字列を受け取ります。


データをインポートする全く異なる方法特別なJSONドキュメントをインポートします。最後の値ファイルから:

your-command | jq -r 'getpath([paths(scalars)][-1])'

まず、ドキュメント全体ですべてのスカラー値を生成するすべての「パス」を使用し、paths最後の値を選択します。次に、式は最後のスカラーのパスを使用してgetpath最後の値を抽出します。これにより、その文書に対して予想される出力が生成されます。

次のコードは同じことができますが、..withの明示的な再帰を使用してselect()すべてのスカラー値を抽出します。

your-command | jq -r '[.. | select(scalars)][-1]'

個人的には、私はこの答えで最も重要な提案を選択します。なぜなら、この答えは何らかの方法でユーザーに理解できる文書の構造を使用するからです。関連する配列のいずれかがより多くの要素を含め始めると、コードを再確認して問題を再現する必要があります。

おすすめ記事