grep 模式下兩行並丟棄其中一行模式

grep 模式下兩行並丟棄其中一行模式

我有一個類似這樣的文件:

DN: 達南

cn: 大年

cn: 大年1


網域:danian2

cn: 大年2


網域:danian3

cn: 大年3

cn: 大年4

我想做的就是grep 模式“dn:”並僅打印接下來的兩行,但是當我運行grep -A 2“dn:”時,結果是文件中的所有內容,我只想打印接下來的兩行不是下 1 行

答案1

這可能有效:

$ awk -v RS="dn: " -v FS="\n" -v ORS="" 'NF>3 {print "dn:",$0}' input.txt

我們定義dn:為記錄分隔符號。一筆記錄中的欄位由換行符號分隔\n

如果在以 開頭的行後面有兩行dn:,在新記錄以 開頭之前dn:,您將有 3 個“\n”,導致記錄中的 4 個欄位。這就是為什麼我們檢查記錄中是否有超過 3 個欄位 ( NF>3)。如果是這種情況,我們會列印整個記錄,但需要在前面添加dn:.

請注意,這NF>3將會尋找一筆記錄中包含多於兩行以下行的所有記錄。如果您只想要那些恰好有兩個的,請將其更改為NF==3.

如果區塊由空白行分隔(正如您後來的評論之一所示),請改用:

$ awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}' input.txt

答案2

我運行上面的命令並且運行良好,

awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}' 

分隔的區塊是空白的,它工作得很好。

相關內容