首页 > 解决方案 > append previous line with current line if the file contains blanks

问题描述

I want to append lines to the previous line if the blank line is followed by the line.

For example:

A
B
C
1
D
E
B

Ouput:

A
B
C
1D
EB

标签: perlawksed

解决方案


另见上述 Håkon Hægland 的评论。这是导致将整个文件视为一个长字符串(带有嵌入的换行符)的问题之一。Perl 有一个标志-0用于更改或关闭完成此操作的默认“记录分隔符”定义。然后您只需要意识到,根据您对“空白行”的定义,您似乎要求简单地删除连续两个或多个换行符的所有序列。(如果您对“空白行”的定义可以包括带有空白字符的行(空格,即空格和制表符),您将需要一个更复杂的表达式。)这个紧凑的单行将做到这一点:

$ perl -0pe 's/\n\n+//g' blanklines
A
B
C
1D
EB

现在请告诉我这不是家庭作业。

更新:我意识到了一些额外的事情。1) 由于换行符包含在 Perl 的空白特殊转义\s中,因此扩展以处理带有空白字符的空白行的情况并不复杂:perl -0pe 's/\n\s+//g' blanklines. 2)有一个边缘情况,这个解决方案不能正确处理:输入末尾的空白行。我会把这个问题留给学生。:-)


推荐阅读