从区域文件中提取行

时间:2017-09-25 21:14:20

标签: linux awk sed bind

我有一个DNS区域文件,如下所示:

record A 1.1.1.1
       A 1.1.1.2
       A 1.1.1.3
other_record A 1.1.1.4
             A 1.1.1.5
another_rec  A 1.1.1.6

我需要提取属于记录的所有行(所以第一个和它下面的两行)没有任何其他行(实际文件有更多这样的记录,所以greping第一行和下面的另外两行不是一个有效的解决方案。)

预期结果:

record A 1.1.1.1
       A 1.1.1.2
       A 1.1.1.3

5 个答案:

答案 0 :(得分:0)

awk '/^[^[:space:]]/{f = ($1=="record" ? 1 : 0)} f' file

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed '/^record/{:a;n;/^\S/Q;ba};d' file

这在第一次出现record后终止, 或者:

sed '/^\S/h;G;/^record/MP;d' file

这将打印所有record

答案 2 :(得分:0)

您还可以考虑使用各种语言(如python等)提供的dns区域文件解析器。

一旦您将区域文件内容作为对象处理,那么它很容易以您想要的方式操作它。

我在快速网络搜索后得到了这个 - https://github.com/blockstack/zone-file-py。 (还有很多其他人......你需要看看哪一个最适合你)

答案 3 :(得分:0)

如果有帮助,请您试试并告诉我。

awk '/^[a-z]+/ && !/^record/{flag=""} /^record/{flag=1} flag'  Input_file

答案 4 :(得分:-1)

awk '!/_/&&NR!=5' file

record A 1.1.1.1
       A 1.1.1.2
       A 1.1.1.3