配置文件如下所示(我必须检查数百个):

    define host {
        host_name   db.xxx.yyy
        address     10.5.220.10
        use         yyy-server
        parents     router.xxx.yyy
    }
    define host {
        host_name   drac.vs2.xxx.yyy
        address     10.5.220.48
        use         yyy-drac
        parents     router.xxx.yyy

    }
    define service {
            use             disk-opt-service
            host_name       db.xxx.yyy
    }

我的工作是删除所有包含db.xxx.yyy的块
因此,结果如下所示(删除了顶部和底部块,因为它们在块中都包含db.xxx.yyy):
    define host {
        host_name   drac.vs2.xxx.yyy
        address     10.5.220.48
        use         yyy-drac
        parents     router.xxx.yyy

    }

最佳答案

sed解决方案:

sed -Ez 's/define (host|service) \{[^}]+db\.xxx\.yyy[^{}]+\}//g' file

-z-将输入视为一组行,每行以零字节(ASCII‘NUL’字符)结束,而不是换行
输出:
define host {
    host_name   drac.vs2.xxx.yyy
    address     10.5.220.48
    use         yyy-drac
    parents     router.xxx.yyy

}

关于linux - Linux:匹配一个表达式,然后删除整个相关块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45968630/

10-10 17:43