1

を使用して構成ファイルにホスト名を追加しようとしていますsed。追加する必要があるホストが複数あるため、自動化したいと考えています。私は次の状況で立ち往生しています:

入力ファイルの例:

#######################################################################
#
#Service: System Uptime

#######################################################################

define service{
        use                            generic-service
        host_name                       host1,host2,host3,host4,host5,host6,host7,host8,host9,host10,host11,host12,host13,host14,host15,host16,host17,host18,host19,host20,host21,host22,host23,host24,host25,host26,host27,host28,host29,host30
        service_description            System Uptime
        is_volatile                    0
        check_period                   24x7
        contact_groups                 Test_group
        notification_options           c,w,r,u
        check_command                  check_nt_uptime
        max_check_attempts             3
        normal_check_interval          1
        retry_check_interval           1
        notification_interval          120
        notification_period            24x7
        }

達成しようとしているのは、新しいホストを「host_name」行に追加することですが、ファイルには「host_name」が非常に多く出現するため、特定のサービスに追加するには、「Service: System Uptime」を検索してからそこから 7 行目で「host_name」を検索し、新しいホストを追加します。

私は私が使いたいことをしましたsed:

sed   '/Service: System Uptime/{N;N;N;N;N;N;N;N;/host_name/s|$|,NewHost|}' input file 

問題は、そこに複数のホストがある場合、上記のsedコマンドが失敗し、改行してホストを追加することです。

それに関する提案はありますか?

4

2 に答える 2

2

問題を理解しているかどうか確信が持てず、提供された構成ファイルのスニペットに基づいて問題を再現できません。そうは言っても、次のコマンドはあなたのものとほぼ同等であり、「行数」ベースのシークに依存していないと思います。

sed   '/Service: System Uptime/,/host_name/{/host_name/s|$|,NewHost|}' input_file
于 2013-06-27T12:39:32.953 に答える
2

なぜあなたは使用しようとしていますsedか?これは の仕事ですawk:

awk '/#Service: System Uptime/ {a=1} 
  a && /host_name/ { a=0; $0 = $0 ", new_host" } 1' input-file
于 2013-06-27T13:06:23.830 に答える