我有一个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
答案 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