配置文件如下所示(我必须检查数百个):
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/