前の行に特定の単語が含まれている場合にのみ行を印刷します。

前の行に特定の単語が含まれている場合にのみ行を印刷します。

ホスト名とホストIPを含む次のファイルがあります(長いファイル、Linuxボックスあたり90〜100台のマシン)。

hosts.cluster.conf

  "href" : "http://localhost:8080/api/v1/hosts/worker02.sys87.com",
  "Hosts" : 
    "cluster_name" : "hdp",
    "host_name" : "worker02.sys87.com",
    "ip" : "23.67.32.65"


  "href" : "http://localhost:8080/api/v1/hosts/worker03.sys87.com",
  "Hosts" : 
    "cluster_name" : "hdp",
    "host_name" : "worker03.sys87.com",
    "ip" : "23.67.32.66"


  "href" : "http://localhost:8080/api/v1/hosts/worker04.sys87.com",
  "Hosts" : 
    "host_name" : "worker04.sys87.com",
    "ip" : "23.67.32.67"


  "href" : "http://localhost:8080/api/v1/hosts/worker05.sys87.com",
  "Hosts" : 
    "cluster_name" : "hdp",
    "host_name" : "worker05.sys87.com",
    "ip" : "23.67.32.68"

すべて印刷したいです。CPU名前の行に「が含まれている場合のみクラスタ名「言葉

期待されるパフォーマンス

"host_name" : "worker02.sys87.com",

"host_name" : "worker03.sys87.com",

"host_name" : "worker05.sys87.com",

ベストアンサー1

sed '/host_name/!h;//!d;x;/cluster_name/!d;g' infile

host_name前のバッファと一致しないすべてのラインを保存hし、残りのdラインすべてを削除します。xバッファを変更し、パターン空間に対応する行がない場合はcluster_name削除します。それ以外の場合は、gバッファに保存して自動的に印刷します。元の行を返します。

おすすめ記事