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