如果空白行后面是一行,我想在前一行后面添加行。
例如:
__init__
输出:
A
B
C
1
D
E
B
答案 0 :(得分:3)
另请参见上方HåkonHæ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)在这种情况下,这种解决方案无法正确处理:输入端的空白行。我将其留给学生解决。 :-)