Shell-Script
grep 模式下兩行並用一行丟棄模式
我有一個像這樣的文件:
dn: 大南
cn: danian
cn: 大年1
dn: 大年2
cn: 大年2
dn: danian3
cn: 大年3
cn: 大年4
我要做的就是 grep 模式“dn:”並只列印接下來的 2 行,但是當我執行 grep -A 2 “dn:”時,結果就是文件中的所有內容,我只想列印接下來的 2 行不是下 1 行
我執行上面的命令並且執行良好,
awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}'
分隔的塊是空白的,它工作得很好。
這可能有效:
$ 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