删除文件中的多行(Nagios 配置)

Delete multiple lines in file (Nagios configuration)

我试图从 Nagios 配置文件中删除多行。但是我失败了很多次。现在我向你求助。

Nagios 配置文件:

define host{
        use                     linux-host
        host_name               vm1
        alias                   vm1
        address                 1.2.3.4    }

define host{
        use                     linux-host
        host_name               vm2
        alias                   vm2
        address                 1.2.3.4
}

define host{
        use                     linux-host
        host_name               vm3
        alias                   vm3
        address                 1.2.3.4
}

我需要一个允许我删除整个文本块的通用命令(定义主机{.*})。例如。 "vm2"。不应删除 vm1 和 vm3 的文本块。

你有想法吗?

提前谢谢你。 Tzzaetaynzz

如果块由空行分隔并且块内没有空行:

awk -v RS="" -v ORS="\n\n" '!/vm2/' file

注意我用了vm2作为模式,大家可以根据自己的需要进行细化。例如:host_name +vm1 或其他。

-0777读取整个文件(undef记录分隔符) -i原地修改, .BAK 备份扩展名为 .BAK 的文件

perl -0777 -i.BAK -pe 's/define host\{[^{]*vm2.*?\}//gs' config_file