我有一个包含以下字符串的CSV文件:
ID1;banana
| apple
| oranges
我希望每次在行的开头都有一个管道时,字符串将被附加到前一行,输出应该是这样的:
ID1;banana | apple | oranges
如何删除以管道|
开头的行之前的换行符?
答案 0 :(得分:4)
在一个hackish one liner中,在管道之前移除返回:
perl -ne '$s = do {local $/; <>}; $s =~ s/\n\|/ |/g; print $s' file.csv
答案 1 :(得分:1)
而不是尝试退格/擦除已经打印的内容,而不是仅在打印回车时打印回车符。不是第一个字符:
perl -n -e 'chomp; /^\s*\|/? print " $_": print "\n$_" ' yourfile.txt
答案 2 :(得分:0)
您是否显示单个CSV字段的值?如果是这样,那么您应该使用Text::CSV
将每一行划分为字段(因为其getline
方法是处理包含嵌入换行符的数据的最简单方法)并且您可以使用替换{{1}如果换行符在管道符号之前,则将换行符更改为空格。
这是一个例子
s/\n(?=\|)/ /g
<强>输出强>
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV->new({ binary => 1, eol => $/ });
while (my $row = $csv->getline(*DATA)) {
s/\n(?=\|)/ /g for @$row;
print "$_: $row->[$_]\n" for 0 .. $#$row;
print "\n";
}
__DATA__
"ID1;banana
| apple
| oranges",f2,f3
g1,g2,g3
如果您的情况不同,那么您需要解释。