示例文字:
DATE(eu.updated)
我想删除中间没有任何数据的部分。那是;如果heading2后跟一个空行,则删除heading2,heading1和上面的空行。
我已经找到了如何仅在后面跟一个空行删除行,以及如何删除模式上/下的n行,但无法解决如何合并这两行。
感谢。
答案 0 :(得分:8)
您可以使用awk
:
awk 'BEGIN{RS=ORS="\n\n";FS="\n"} NF>2' input.file
虽然awk
默认情况下按行进行操作,但记录不一定需要是一行。使用RS
(输入记录分隔符),您可以定义记录的分隔方式。
我将RS
块中的BEGIN
设置为空白行,以便按段落分隔记录,将FS
分隔为换行符,以换行符分隔字段。
NF
成立是当前记录中的字段数。 NF>2
检查包含2行以上的任何记录 - 如果满足此条件,awk
将打印记录。
ORS
是输出记录分隔符。我将其设置为空行,如FS
,以便将输出中的各个记录分开。
答案 1 :(得分:2)
这是一种类似的方法,可以消除打印最后一个空行:
awk -v RS= 'NF>2{print sep $0; sep=ORS}' file
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed ':a;N;/^$/M!ba;s/\n/&/3;t;d' file
在模式空间中存储由空行分隔的记录。如果记录包含3个或更多新行,则将其删除。