繁体   English   中英

合并以“ +”开头的续行

[英]Combine continuation lines starting with “+”

我知道这是一个被问过很多次的问题,我没有找到可以回答我的特定问题的答案。

本质上,我有一个输入文件,其中某些行以+字符串开头。 这些行必须附加在上一行的末尾,并且必须删除+字符。 所以

abc
def
+ ghj
klm

应该成为

abc
def ghj
klm

这是我通过查看其他答案制作的perl命令

perl -pe 's/\n\+ //m' < input

但它会打印输入文件而不进行更改。 奇怪的是,在regex101.com等网站上,我的regex产生了预期的结果。

我想念什么?

大概这些文件相对较小,因此很容易装入内存吗?

这是最简单的方法

use strict;
use warnings 'all';

my $data = do {
    local $/;
    <DATA>;
};

$data =~ s/\n\+//g;

print $data;

__DATA__
abc
def
+ ghj
klm

产量

abc
def ghj
klm

在Perl的单行代码中

perl -0777 -pe 's/\n\+//g' < input

您可以将输入记录分隔符$/更改为字符串"\\n+" (对于Windows文件 ,则更改为"\\r\\n+" ,那么您只需要压缩每条记录:

perl -pe 'BEGIN{$/="\n+"}chomp' file

@Borodin为您的问题提供了一个很好的解决方案。 此外,如果您需要将其更新为旧文件,只需添加“ -i”:

perl -0777 -i -pe 's/\n\+//g' input

或者,如果您要将源文件保留为备份,请使用:

perl -0777 -i.bak -pe 's/\n\+//g' input

如果要恢复,将生成一个名为input.bak的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM