我有一个包含DNS区域条目的输入文件
; whatever.foo [000000]
$ORIGIN whatever.foo.
$TTL 8400
@ IN SOA ns1.whatever.foo. admin.whatever.foo. (
2017101913 ; serial number
21600 ; refresh
8400 ; retry
1209600 ; expire
8400 ; ttl
)
xxx IN A 000.000.000.000
something-xxx IN A 000.000.000.000
other-xxx IN A 000.000.000.000
else.xxx IN A 000.000.000.000
yyy IN A 000.000.000.001
something-yyy IN A 000.000.000.001
other-yyy IN A 000.000.000.001
else.yyy IN A 000.000.000.001
如何删除属于xxx子域域的条目?
输出应为
; whatever.foo [000000]
$ORIGIN whatever.foo.
$TTL 8400
@ IN SOA ns1.whatever.foo. admin.whatever.foo. (
2017101913 ; serial number
21600 ; refresh
8400 ; retry
1209600 ; expire
8400 ; ttl
)
yyy IN A 000.000.000.001
something-yyy IN A 000.000.000.001
other-yyy IN A 000.000.000.001
else.yyy IN A 000.000.000.001
我希望它是一个bash脚本,所以我可以打电话给。
delete_domain.sh xxx
感谢。
答案 0 :(得分:1)
一种方式:
测试文件:
$ cat file
xxx IN A 000.000.000.000
else.xxx IN A 000.000.000.000
something-xxx IN A 000.000.000.000
other-xxx IN A 000.000.000.000
abc IN A 000.000.000.000
$
模式文件:
$ cat patterns
xxx
something-xxx
other-xxx
else.xxx
$
Awk选项:
$ awk 'NR==FNR{a[$1];next}!(($1 in a) && $2=="IN" && $3=="A")' patterns file
abc IN A 000.000.000.000
$
首先,我们将要删除的所有模式加载到关联数组a中。然后,当处理测试文件时,只打印那些第一列不是模式的一部分而第二列是" IN"第3栏是" A"。
答案 1 :(得分:0)
只需 grep 即可:
grep -E -v 'xxx\s+IN\s+A' file
要摆脱多个空行,将其输入:
cat -s
将它们放在bash脚本中:
$ cat test.sh
#!/bin/bash
grep -E -v 'xxx\s+IN\s+A' $1 | cat -s
并将其命名为:
./test.sh file