代码之家  ›  专栏  ›  技术社区  ›  Ray

用sed替换tinydns分区文件中的TTLs?

  •  1
  • Ray  · 技术社区  · 15 年前

    我正在更换一些tinydns分区文件中的一大组TTL。不管TTL当前设置为什么,我希望它变成900。我在找一些sed魔法,我好像快到了。

    我有大约50个主机名来替换TTL,并且这些区域是零星分配的。

    区域文件中的行不需要包含TTL。如果他们没有,就需要附加TTL。换句话说,我将要搜索的行如下所示:

    ^.*hostname:(hostname|IP)[:#]$
    

    +abc.com:12.12.12.12
    =*.abc.com:x.y.z.com:1200

    因此,我需要帮助构造sed命令的正则表达式。会是这样的:

    cat hosts.txt | while read host; do
      sed -i 's/'$host':([^:]*)(?:[0-9]*)/'$host':\1:900/' zonefile*
    done

    1 回复  |  直到 15 年前
        1
  •  4
  •   ghostdog74    15 年前

    regex并不总是执行某些任务的最佳方式。数据文件包含结构化信息(即由一些常量字符分隔,如“:”)。因此,使用字段更容易操作。这是一个糟糕的解决方案

    awk 'BEGIN{ OFS=FS=":"}NF<3{ $0=$0":"900}NF>=3{ $NF=900}1' file
    

    不需要花时间构建正则表达式。