我有一个包含 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
谢谢。
最佳答案
一种方式:
测试文件:
$ 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”,第三列是“A”的那些行。
关于linux - 使用 bash 脚本从文件中删除特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827026/