如果文件包含空格,则在当前行后附加上一行

时间:2019-08-30 12:33:57

标签: perl awk sed

如果空白行后面是一行,我想在前一行后面添加行。

例如:

__init__

输出:

A
B
C
1
D
E
B

1 个答案:

答案 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)在这种情况下,这种解决方案无法正确处理:输入端的空白行。我将其留给学生解决。 :-)