シェルを使用したYAML部分解析

シェルを使用したYAML部分解析

私のYAMLは次のとおりです

something:
 - whatever:
   - something
 - toc: 4
 - body: assets/footer.html
pkg:
 - pkg_a_1:
   - Shass
   - AJh55
   - ASH7
 - pkg_b_1:
   - Kjs6
   - opsaa
other:
morestuff:
 - whatever

次の内容を抽出したい。パッケージ次のようにテキストファイルとして印刷します。

pkg_a_1 Shass
pkg_a_1 AJh55
pkg_a_1 ASH7
pkg_b_1 Kjs6
pkg_b_1 opsaa

このセクションだけが必要で、残りの大型YAMLファイルは必要ないため、完全なYAMLパーサーを使用しないようにします。

  • いくつかのタグ(パッケージ) は固定され、一度だけ表示され、変更されません。
  • 測定値ラベルと測定値番号(pkg_a_1pkg_b_1)を交換できます。
  • 各セクションの項目数と順序は変更されることがあります。プロジェクトに[A-Za-z0-9]+
  • 内容の前後パッケージ部品は変更されることがあります。 IEのさまざまな部分何:そして その他:存在する場合も存在しない場合もあります。

ベストアンサー1

$ awk '/^[^ ]/{ f=/^pkg:/; next } f{ if (sub(/:$/,"")) pkg=$2; else print pkg, $2 }' file
pkg_a_1 Shass
pkg_a_1 AJh55
pkg_a_1 ASH7
pkg_b_1 Kjs6
pkg_b_1 opsaa

おすすめ記事