我想删除一些特殊情况下的换行符。我有一条短信:
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 我想替换数字和一些文本之间的换行符如下:
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我只想抹去数字和句子之间的新线。
有谁可以帮我?
发布于 2015-02-13 11:30:48
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,而不需要换行。发布于 2015-02-13 11:24:16
我将看一下示例输出,它还删除了句子中间的换行符。你可以用这个:
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换行,可以使用
# vvvv-- new stuff here
sed ':a $!{N;ba}; s/\r\?\n\([^0-9]\)/\1/g' filename这将可选择匹配一个\r之前的\n,并删除整个\r\n,以防它找到DOS断线。
或者你可以使用dos2unix。
https://stackoverflow.com/questions/28498424
复制相似问题