sed - このパターンをどのように一致させますか?

sed - このパターンをどのように一致させますか?

sedを使用していますが、各ブロックからテキストの最初の行の一部を削除する方法はわかりません。これは私の生データです。

  "s220823vaps2512":   {
"hostname": "s220823vaps2512",
"description": data",
"type": "Virtual",
"os": "data",
"idc": "data",
"environment": "data",
"deviceclass": "data",
"cores": "data",
"memory": "data",
"frontnet": "data",
"ipset":     {
  "backnet": "data",
  "storagenet": "data",
  "metroclusternet": "data"
},
"roles": "data",
"mounts": "data"
  },
   "s220823vaps2513":   {
"hostname": "s220823vaps2513",
"description": "data",
"type": "Virtual",
"os": "data",
"idc": "data",
"environment": "data",
"deviceclass": "data",
"cores": "data",
"memory": "data",
"frontnet": "data",
"ipset":     {
  "backnet": "data",
  "storagenet": "data",
  "metroclusternet": "data"
},

{私はsedを使用して各ブロックの最初の行の前にあるすべてを正常に削除し、次のようなものを残したいと思います。

{
 "hostname": "data",
  "etc": "etc",
},
{
 "hostname": "data",
  "etc": "etc",
},

ベストアンサー1

この答えはJSONと非常によく似た上記の内容に基づいているため、可能であると仮定します。はい JSON。しかし、あなたのサンプルでは不完全で、誤字だと思います。そうでなければ…まあ、あなたはすでにsed答えを持っています。

解析に正規表現を使用しないでくださいJSON。逆すぎる。正規表現は、JSON/などのデータ型を再帰的にタグ付けするのには適していませんXML。これは、せいぜい将来脆弱なコードを生成する汚れたハッキン​​グに過ぎません。

繰り返しますが、JSON完成度が重要です。あなたの完全な外観を推測する必要がありますJSON

これを仮定しますJSON(使用してhttp://jsonlint.com/コンポーネント)

{
    "s220823vaps2512": {
        "hostname": "s220823vaps2512",
        "description": "data",
        "type": "Virtual",
        "os": "data",
        "idc": "data",
        "environment": "data",
        "deviceclass": "data",
        "cores": "data",
        "memory": "data",
        "frontnet": "data",
        "ipset": {
            "backnet": "data",
            "storagenet": "data",
            "metroclusternet": "data"
        },
        "roles": "data",
        "mounts": "data"
    },
    "s220823vaps2513": {
        "hostname": "s220823vaps2513",
        "description": "data",
        "type": "Virtual",
        "os": "data",
        "idc": "data",
        "environment": "data",
        "deviceclass": "data",
        "cores": "data",
        "memory": "data",
        "frontnet": "data",
        "ipset": {
            "backnet": "data",
            "storagenet": "data",
            "metroclusternet": "data"
        }
    }
}

次に、希望のビットを取得する方法は次のとおりです。

#!/usr/bin/env perl
use strict;
use warnings;

use JSON;

my $input = ### as above, snipped for brevity. 

#decode/validated
my $json = decode_json ( $input );
#create new JSON array of elements. 
my $new_json = [map { $json -> {$_} } keys %$json];
#print it out. 
print to_json ( $new_json, { pretty => 1, canonical => 1 } );

これにより、有効なJSON出力を生成し、キーの順序が異なる状況(JSONでは完全に有効)を処理できます。

おすすめ記事