【问题标题】:How to remove a text block from a file with bash如何使用 bash 从文件中删除文本块
【发布时间】:2012-07-31 10:45:45
【问题描述】:

我有以下配置的绑定配置文件:

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;
        };
};

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

【问题讨论】:

标签: linux bash sed awk


【解决方案1】:

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

sed '/^zone "domain4.com" {$/,/^};/d' file

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

#!/bin/bash
sed '/^zone "'"$1"'" {$/,/^};/d' file

【讨论】:

  • 对于其他 SED 新手.. 我可以通过假设:sed '/^STARTSTR-MARK$/,/^ENDSTR-MARK/d' file 基于此答案来为我工作。
【解决方案2】:

如果文件有序,您可以使用awk 自动记录和字段分离:

awk '
  BEGIN { RS = ORS = "\n\n"; FS="\n" } 
  $1 !~ /domain3/
' file

删除第一行包含“domain3”的区域。

【讨论】:

  • 这是一个很好的方法,但写起来可能更干净awk '$2 !~ /domain3/' RS= file
  • 是与否,还需要设置ORS='\n\n,否则记录之间的空格会被去掉。
猜你喜欢
  • 2023-04-08
  • 2021-09-04
  • 1970-01-01
  • 2018-10-03
  • 2011-11-13
  • 1970-01-01
  • 2013-10-18
  • 2012-05-14
相关资源
最近更新 更多