我有一个包含以下内容的文本文件:
1234 ^Y DATA ^Y DATA
1235 ^Y DATA ^Y DATA
1236 ^Y DATA ^Y DATA
/text text
/more text
1237 ^Y DATA ^Y DATA
第4行和第5行属于第3行的末尾,但它们在文本文件中写为换行符。如果它不符合NUMBER ^ Y,有没有办法追加上一行,并在发生这种情况时添加一组特定的字符?
^ Y在这种情况下是字段分隔符。
答案 0 :(得分:0)
use strict;
use warnings;
my @out;
while (my $line = <DATA>) {
chomp $line;
# regex to check for NUMBER ^Y;
if ($line =~ /^\d+\s+\^Y/) {
push @out, $line;
} else {
# append to the last element of the array
$out[-1] .= ' *chars to add* '.$line;
}
}
print $_."\n" for @out;
__DATA__
1234 ^Y DATA ^Y DATA
1235 ^Y DATA ^Y DATA
1236 ^Y DATA ^Y DATA
/text text
/more text
1237 ^Y DATA ^Y DATA
答案 1 :(得分:0)
awk
救援!
$ awk '{if(/\^Y/){if(p) print p; p=$0} else p=p $0}
END{print p}' file
1234 ^Y DATA ^Y DATA
1235 ^Y DATA ^Y DATA
1236 ^Y DATA ^Y DATA/text text/more text
1237 ^Y DATA ^Y DATA
答案 2 :(得分:0)
在这里,我们使用s
修饰符检查并删除从该行开始的不等于数字之前的entermark。
use strict;
use warnings;
my $text = do { local $/; <DATA> };
$text=~s/\n([^\d])/ <INSERT TEXT> $1/sg;
print $text;
__DATA__
1234 ^Y DATA ^Y DATA
1235 ^Y DATA ^Y DATA
1236 ^Y DATA ^Y DATA
/text text
/more text
1237 ^Y DATA ^Y DATA
输出:
1234 ^Y DATA ^Y DATA
1235 ^Y DATA ^Y DATA
1236 ^Y DATA ^Y DATA <INSERT TEXT> /text text <INSERT TEXT> /more text
1237 ^Y DATA ^Y DATA