perl - 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
解决方案
另见上述 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)有一个边缘情况,这个解决方案不能正确处理:输入末尾的空白行。我会把这个问题留给学生。:-)
推荐阅读
- python - 是否有 Python 函数来创建点模式?
- c++ - 使用泛型方法时“没有匹配的函数调用”
- python - RuntimeWarning: power 中遇到溢出
- mongodb - 使用 MongoDB 管理事务文档
- ios - 使用 Alamofire multipart 显示上传进度通知
- python - 为什么python中的df.at行显示有问题?
- php - 如何在 htaccess 中删除博客?city=
- python - 当 UTF 是多字节且 latin1 是单字节时,为什么会出现错误?
- r - 即使变量的顺序不同,如何将 table() 的结果转换为频率?
- python - 有没有办法使用pymysql将数据框插入mysql?