匹配正则表达式时替换上一个



当前行开始时我需要删除前一行的"行尾"不是数字^[!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

相关内容

  • 没有找到相关文章

最新更新