如何仅在数字和句子之间replace换行符?

我想在一些特殊情况下删除换行符。 我有这样的文字:

0 15.239 23.917 Reprenem el debat que avui els oferim entorn de les perspectives d'aquest dos mil set. <ehh> Estavem parlant concretament dels temes 30.027 de la seguretat mundial una miqueta de la intervencio 33.519 que 

我想用一个数字和一些文本replace换行符,如下所示:

 0 15.239 23.917 Reprenem el debat que avui els oferim entorn de les perspectives d'aquest dos mil set. <ehh> Estavem parlant concretament dels temes 30.027 de la seguretat mundial una miqueta de la intervencio 33.519 que 

我只想抹去数字和句子之间的新界限。

谁能帮我?

awk

 awk '/^[0-9]+\.[0-9]+/{printf "\n"}{printf $0}' filename 

为了处理DOS换行符:

 awk '{sub(/\r$/,"")}/^[0-9]+\.[0-9]+/{printf "\n"}{printf $0}' filename 

演示:

 $ awk '{sub(/\r$/,"")}/^[0-9]+\.[0-9]+/{printf "\n"}{printf $0}' filename 0 15.239 23.917 Reprenem el debat que avui els oferim entorn de les perspectives d'aquest dos mil set. <ehh> Estavem parlant concretament dels temes 30.027 de la seguretat mundial una miqueta de la intervencio 33.519 que que 

解释代码:

  • {sub(/\r$/,"")} :删除DOS换行符。

  • /^[0-9\.]+/{printf "\n"} :当行以number / dot组合开始时,只打印一个回车,返回继续进行记录处理。

  • {printf $0} :对于保留的记录或者不是由数字开始的记录,只打印$0而没有换行符。

  • 最后,把电话号码放在数字之前,忽略其余的数字。

我将以您的示例输出为例,这也会在句子中间删除换行符。 你可以使用这个:

 sed ':a $!{N;ba}; s/\n\([^0-9]\)/\1/g' filename 

那是

 :a $!{N;ba} # assemble the whole file in the pattern space s/\n\([^0-9]\)/\1/g # remove newlines that are not directly before a number 

要处理DOS linebreaks,你可以使用

 # vvvv-- new stuff here sed ':a $!{N;ba}; s/\r\?\n\([^0-9]\)/\1/g' filename 

可以选择在\n之前匹配\r ,并在找到DOS换行符的情况下删除整个\r\n

或者你可以使用dos2unix。