4
template: perm_subcluster
   copy_cluster: yms_cfg_ref
   allocations:
   - type: cfgstore
     hosts:
     - {name: ymscfg-02.ops.bf1.yahoo.com, farm: east}
     - {name: ymscfg-02.ops.gq1.yahoo.com, farm: west}
   - type: aggregator
     hosts:
     - {name: ymsagg-08.ops.bf1.yahoo.com, farm: east}
     - {name: ymsagg-10.ops.gq1.yahoo.com, farm: west}
   - type: metricsdb
     hosts:
     - {name: ymsdb-11.ops.bf1.yahoo.com, farm: east}
     - {name: ymsdb-11.ops.gq1.yahoo.com, farm: west}

上記のコードは、ファイル temp.txt に属しています。別のファイル tempo.pl には、perl スカラー変数 $pattern があります。$pattern の値は次のとおりです。

- type: cfgstore
  hosts:
  - {name: ymscfg-02.ops.bf1.yahoo.com, farm: east}
  - {name: ymscfg-02.ops.gq1.yahoo.com, farm: west}
- type: aggregator
  hosts:
  - {name: ymsagg-08.ops.bf1.yahoo.com, farm: east}
  - {name: ymsagg-10.ops.gq1.yahoo.com, farm: west}
- type: metricsdb
  hosts:
  - {name: ymsdb-11.ops.bf1.yahoo.com, farm: east}
  - {name: ymsdb-11.ops.gq1.yahoo.com, farm: west}

テンプレート名、つまり template: perm_subcluster を返す perl、sed、awk、または regex でコードのブロックを書きたい $pattern の値が temp.txt の行のブロックと一致する場合。

4

3 に答える 3

4

説明

「検索対象」ブロックを変更して、ターゲット データに存在するものと同じ先行スペースをすべて含める必要があります。

テキストの検索は、この式の\Q...\Eタグの間に挿入する必要があります。選択したテキスト ブロックのテンプレート名が式によって検出され、その名前がキャプチャ グループ 1 に配置されます。

^template:\s*(\S*).*?(?=^)(?:^\s+(?:(?!^).)*)*?^\Q   - type: cfgstore
     hosts:
     - {name: ymscfg-02.ops.bf1.yahoo.com, farm: east}
     - {name: ymscfg-02.ops.gq1.yahoo.com, farm: west}
   - type: aggregator
     hosts:
     - {name: ymsagg-08.ops.bf1.yahoo.com, farm: east}
     - {name: ymsagg-10.ops.gq1.yahoo.com, farm: west}
   - type: metricsdb
     hosts:
     - {name: ymsdb-11.ops.bf1.yahoo.com, farm: east}
     - {name: ymsdb-11.ops.gq1.yahoo.com, farm: west}\E

入力テキスト

template: perm_subcluster
   copy_cluster: yms_cfg_ref
   allocations:
   - type: cfgstore
     hosts:
     - {name: ymscfg-02.ops.bf1.yahoo.com, farm: east}
     - {name: ymscfg-02.ops.gq1.yahoo.com, farm: west}
   - type: aggregator
     hosts:
     - {name: ymsagg-08.ops.bf1.yahoo.com, farm: east}
     - {name: ymsagg-10.ops.gq1.yahoo.com, farm: west}
   - type: metricsdb
     hosts:
     - {name: ymsdb-11.ops.bf1.yahoo.com, farm: east}
     - {name: ymsdb-11.ops.gq1.yahoo.com, farm: west}
template: Not_me
   copy_cluster: yms_cfg_ref
   allocations:
   - type: cfgstore
     hosts:
     - {name: Fail_ymscfg-02.ops.bf1.yahoo.com, farm: east}
     - {name: Fail_ymscfg-02.ops.gq1.yahoo.com, farm: west}
   - type: aggregator
     hosts:
     - {name: ymsagg-08.ops.bf1.yahoo.com, farm: east}
     - {name: ymsagg-10.ops.gq1.yahoo.com, farm: west}
   - type: metricsdb
     hosts:
     - {name: ymsdb-11.ops.bf1.yahoo.com, farm: east}
     - {name: ymsdb-11.ops.gq1.yahoo.com, farm: west}

マッチ

[0] => template: perm_subcluster
   copy_cluster: yms_cfg_ref
   allocations:
   - type: cfgstore
     hosts:
     - {name: ymscfg-02.ops.bf1.yahoo.com, farm: east}
     - {name: ymscfg-02.ops.gq1.yahoo.com, farm: west}
   - type: aggregator
     hosts:
     - {name: ymsagg-08.ops.bf1.yahoo.com, farm: east}
     - {name: ymsagg-10.ops.gq1.yahoo.com, farm: west}
   - type: metricsdb
     hosts:
     - {name: ymsdb-11.ops.bf1.yahoo.com, farm: east}
     - {name: ymsdb-11.ops.gq1.yahoo.com, farm: west}
[1] => perm_subcluster
于 2013-06-28T18:38:06.407 に答える
0

たとえば、 awk を使用して、ymsagg-08次を試すことができます。

awk '$1=="template:"{t=$2} $0~s{print t}' s="ymsagg-08" file
于 2013-06-30T10:00:46.420 に答える