如何使用bash从文件中删除文本块

rdo*_*rdo 2 linux bash awk sed

我有以下配置的bind配置文件:

zone "domain1.com" {
        type master;
        file "masters/domain1.com";
        allow-transfer {
                dnscontroller_acl;
        };
};


zone "domain2.com" {
        type master;
        file "masters/domain2.com";
        allow-transfer {
                dnscontroller_acl;
        };
};

zone "domain3.com" {
        type master;
        file "masters/domain3.com";
        allow-transfer {
                dnscontroller_acl;
        };
};

zone "domain4.com" {
        type master;
        file "masters/domain4.com";
        allow-transfer {
                dnscontroller_acl;
        };
};
Run Code Online (Sandbox Code Playgroud)

如何在bash的帮助下从文件中删除区域配置(从zone文件名和结尾开始};)?

cho*_*oba 7

您可以使用sed删除给定区域的配置:

sed '/^zone "domain4.com" {$/,/^};/d' file
Run Code Online (Sandbox Code Playgroud)

如果你想要一个可以将区域作为参数的脚本,只需添加she-bang和参数:

#!/bin/bash
sed '/^zone "'"$1"'" {$/,/^};/d' file
Run Code Online (Sandbox Code Playgroud)