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

时间:2017-12-14 11:45:39

标签: bash awk sed grep nagios

我尝试从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
}

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

你有想法吗?

提前谢谢你。 Tzzaetaynzz

2 个答案:

答案 0 :(得分:1)

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

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

注意我使用vm2作为模式,您可以根据需要对其进行优化。例如:host_name +vm1或其他。

答案 1 :(得分:1)

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

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