[英]Removing specific lines from file using bash script
我有一個包含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”的那些行。
只需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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.