我需要删除"行尾#34;当前行开始时前一行的数字不是数字^ [!0-9],基本上如果匹配,则追加到该行之前,我是一个sed& awk n00b,真的很喜欢他们顺便说一句。感谢
编辑:
$ cat file
1;1;1;text,1
2;4;;8;some;1;1;1;more
100;tex
t
broke
4564;1;1;"also
";12,2121;546465
$"脚本"文件
1;1;1;text,1
2;4;;8;some;1;1;1;more
100;text broke
4564;1;1;"also";12,2121;546465
答案 0 :(得分:2)
您没有发布任何样本输入或预期输出,所以这是一个猜测但听起来像您要求的那样:
$ cat file
a
b
3
4
c
d
$ awk '{printf "%s%s",(NR>1 && /^[[:digit:]]/ ? ORS : ""),$0} END{print ""}' file
ab
3
4cd
关于OPs新发布的输入:
$ awk '{printf "%s%s",(NR>1 && /^[[:digit:]]/ ? ORS : ""),$0} END{print ""}' file
1;1;1;text,1
2;4;;8;some;1;1;1;more
100;textbroke
4564;1;1;"also";12,2121;546465
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -r ':a;$!N;s/\n([^0-9]|$)/\1/;ta;P;D' file
在模式空间中保留两行,如果第二行的开头为空或不以整数开头,请删除换行符。
答案 2 :(得分:0)
如果您的系统上有Ruby
array = File.open("file").readlines
array.each_with_index do |val,ind|
array[ind-1].chomp! if not val[/^\d/] # just chomp off the previous item's \n
end
puts array.join
输出
# ruby test.rb
1;1;1;text,1
2;4;;8;some;1;1;1;more
100;textbroke
4564;1;1;"also";12,2121;546465