1

我正在努力替换一些 tinydns 区域文件中的大量 TTL。无论 TTL 当前设置为什么,我都希望它变为 900。我正在寻找一些 sed 魔法,而且我似乎快到了。

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

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

^.*主机名:(主机名|IP)[:#]$

例如

+abc.com:12.12.12.12
=*.abc.com:xyzcom:1200

所以我需要帮助来为我的 sed 命令构建正则表达式。这将是这样的:

猫主机.txt | 读取主机时;做
  sed -i 's/'$host':([^:]*)(?:[0-9]*)/'$host':\1:900/' zonefile*
完毕

任何 sed 大师都觉得慷慨吗?

4

1 回答 1

4

正则表达式并不总是完成某些任务的最佳方式。您的数据文件包含结构化信息(即由一些常量字符分隔,例如 ":" )。因此使用字段更容易操作。这是一个 awk 解决方案

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

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

于 2009-07-08T00:44:30.597 回答