当前行开始时我需要删除前一行的"行尾"不是数字^[!0-9],基本上如果匹配,附加到前面的行,我是一个sed & awk n00b,真的很喜欢他们顺便说一句。
编辑:
$ 猫文件
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
您没有发布任何示例输入或预期输出,因此这是一个猜测,但听起来像您所要求的:
$ cat file
a
b
3
4
c
d
$ awk '{printf "%s%s",(NR>1 && /^[[:digit:]]/ ? ORS : ""),$0} END{print ""}' file
ab
3
4cd
在新发布的输入中:
$ 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
这可能对你有用(GNU sed):
sed -r ':a;$!N;s/n([^0-9]|$)/1/;ta;P;D' file
在模式空间中保留两行,如果第二行的开头为空或不以整数开头,请删除换行符。
如果你的系统上有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