簡體   English   中英

sed,awk或類似 - 如果模式匹配后跟空行,則刪除整行和上面的2行

[英]sed, awk or similar - delete whole line and 2 lines above if pattern matches followed by a blank line

示范文本:

heading1
heading2
data
data
data

heading1
heading2

heading1
heading2
data
data
data

我想刪除中間沒有任何數據的部分。 那是; 如果heading2后跟一個空行,則刪除heading2,heading1和上面的空白行。

我已經找到了如何僅在后面跟一個空行刪除行,以及如何刪除模式上/下的n行,但無法弄清楚如何合並這兩行。

謝謝。

你可以使用awk

awk 'BEGIN{RS=ORS="\n\n";FS="\n"} NF>2' input.file

雖然默認情況下awk按行進行操作,但記錄不一定需要是單行。 使用RS輸入記錄分隔符 ),您可以定義記錄的分隔方式。

我將BEGIN塊中的RS設置為空白行,按段落分隔記錄,將FS分隔為換行符,用換行符分隔字段。

NF hold是當前記錄中的字段數。 NF>2檢查包含多於2行的任何記錄 - 如果滿足此條件, awk打印記錄。

ORS輸出記錄分隔符 我將它設置為空白行,作為FS ,以便將輸出中的各個記錄分開。

這是一種類似的方法,將消除打印最后一個空行:

awk -v RS= 'NF>2{print sep $0; sep=ORS}' file

這可能適合你(GNU sed):

sed ':a;N;/^$/M!ba;s/\n/&/3;t;d' file

在模式空間中存儲由空行分隔的記錄。 如果記錄包含3個或更多新行,則將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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