複数行を追加/交換前の sed パターンを検索

複数行を追加/交換前の sed パターンを検索

実行中のサーバーとサービスのリストがあり、次のサービスにサーバー名をプレフィックスとして追加したいと思います。

次の入力を考慮してください。

"SERVER": "us-east-1e-421"
"SERVICES.SNMP.STATUS": "ok"
"SERVICES.NTP.LATENCY": "1.644"
"SERVICES.POSTFIX.STATUS": "ok"
"SERVER": "us-west-1c-353"
"SERVICES.SNMP.STATUS": "ok"
"SERVICES.NTP.STATUS": "ok"
"SERVICES.NTP.LATENCY": "1.541"
"SERVICES.RSYNC.STATUS": "ok"
"SERVICES.NGINX.STATUS": "ok"

だから私が望むもの

us-east-1e-421 SERVICES.SNMP.STATUS ok
us-east-1e-421 SERVICES.NTP.LATENCY 1.644
us-east-1e-421 SERVICES.POSTFIX.STATUS ok
us-west-1c-353 SERVICES.SNMP.STATUS ok
us-west-1c-353 SERVICES.NTP.STATUS ok
us-west-1c-353 SERVICES.NTP.LATENCY 1.541
us-west-1c-353 SERVICES.RSYNC.STATUS ok
us-west-1c-353 SERVICES.NGINX.STATUS ok

デフォルトのsedを使用して1行またはデフォルトの検索/交換を実行でき、以前に公開されたいくつかのsedガイドを読みました。https://docstore.mik.ua/orelly/unix/sedawk/appa_03.htm しかし、これは私の知識には多すぎて助けが必要です。

sed '/([az]-[AZ]-[a-z0-9]-[0-9])/N;s/\n"/\1 /g'

ベストアンサー1

選ぶawk解決策:

awk -F': ' '{ gsub(/"/,"") }/SERVER/{ s=$2; next }{ print s, $1, $2 }' file

出力:

us-east-1e-421 SERVICES.SNMP.STATUS ok
us-east-1e-421 SERVICES.NTP.LATENCY 1.644
us-east-1e-421 SERVICES.POSTFIX.STATUS ok
us-west-1c-353 SERVICES.SNMP.STATUS ok
us-west-1c-353 SERVICES.NTP.STATUS ok
us-west-1c-353 SERVICES.NTP.LATENCY 1.541
us-west-1c-353 SERVICES.RSYNC.STATUS ok
us-west-1c-353 SERVICES.NGINX.STATUS ok

おすすめ記事