簡體   English   中英

使用bash腳本從文件中刪除特定行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM