中括弧内のテキストを一致させ、中括弧全体を印刷する正規表現

中括弧内のテキストを一致させ、中括弧全体を印刷する正規表現

次の構成ファイルがあります。

define host{
        host_name xxxxxxxx1748
        use windows-server
        alias Comet
        hostgroups +bu-automotiveprd,screen-automotiveprd2
        address XXX.XXX.XXX.XXX
}


define host{
        host_name yyyyyyyyy991
        use aix-server
        alias
        hostgroups +bu-automotiveprd,screen-automotiveprd2
        address YYY.YYY.YYY.YYY
}

検索したいCPU名、一致するものがある場合、出力は次のようになります。

yyyyyyyyy991はい - ホストを検索したいとしましょう。

その後、出力は次のようになります。

define host{
        host_name yyyyyyyyy991
        use aix-server
        alias
        hostgroups +bu-automotiveprd,screen-automotiveprd2
        address YYY.YYY.YYY.YYY
}

ベストアンサー1

この試み、

perl -0777 -ne '/([^\n]*{[^}]*(yyyyyyyyy991)[^}]*})/ && print "$1\n"' file

説明する:

  • perl -0777Perlを実行し、ファイル全体を1行に読み込みます。
  • -ne各行(n)に対してe次の()操作を実行します。
  • /(pattern)/ && print "$1\n"正規表現パターンを一致させ、それを最初の一致グループ($1)として追加してから印刷します。

モデル:

  • [^\n]*{ ... }「{」から次の「}」までを含む行の先頭から何でも一致します。
  • そして...存在[^}]*(yyyyyyyyy991)[^}]*
    • そうでないすべての文字と一致します。}
    • どこかに含める必要がありますyyyyyyyyy991

おすすめ記事