如何仅在数字和句子之间替换换行符?
How do I replace newlines only between numbers and a sentence?
我想在某些特殊情况下删除换行符。我有这段文字:
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
我只想删除数字和句子之间的新行。
谁能帮帮我?
我将按照您的示例输出进行操作,它还会删除句子中间的换行符。你可以使用这个:
sed ':a $!{N;ba}; s/\n\([^0-9]\)//g' filename
也就是
:a $!{N;ba} # assemble the whole file in the pattern space
s/\n\([^0-9]\)//g # remove newlines that are not directly before a number
要处理 DOS 换行符,您可以使用
# vvvv-- new stuff here
sed ':a $!{N;ba}; s/\r\?\n\([^0-9]\)//g' filename
这将有选择地匹配 \n
之前的 \r
并删除整个 \r\n
以防它发现 DOS 换行符。
或者你可以使用 dos2unix。
一个awk
:
awk '/^[0-9]+\.[0-9]+/{printf "\n"}{printf [=10=]}' filename
用于处理 DOS
换行符:
awk '{sub(/\r$/,"")}/^[0-9]+\.[0-9]+/{printf "\n"}{printf [=11=]}' filename
演示:
$ awk '{sub(/\r$/,"")}/^[0-9]+\.[0-9]+/{printf "\n"}{printf [=12=]}' 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
组合开始时,只打印一个回车符return并继续记录处理。
{printf [=20=]}
:对于剩余记录或那些不是以数字开头的记录只打印 [=21=]
没有换行符。
最后,将马车 return 放在数字前面并忽略其余部分就可以了。
我想在某些特殊情况下删除换行符。我有这段文字:
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
我只想删除数字和句子之间的新行。
谁能帮帮我?
我将按照您的示例输出进行操作,它还会删除句子中间的换行符。你可以使用这个:
sed ':a $!{N;ba}; s/\n\([^0-9]\)//g' filename
也就是
:a $!{N;ba} # assemble the whole file in the pattern space
s/\n\([^0-9]\)//g # remove newlines that are not directly before a number
要处理 DOS 换行符,您可以使用
# vvvv-- new stuff here
sed ':a $!{N;ba}; s/\r\?\n\([^0-9]\)//g' filename
这将有选择地匹配 \n
之前的 \r
并删除整个 \r\n
以防它发现 DOS 换行符。
或者你可以使用 dos2unix。
一个awk
:
awk '/^[0-9]+\.[0-9]+/{printf "\n"}{printf [=10=]}' filename
用于处理 DOS
换行符:
awk '{sub(/\r$/,"")}/^[0-9]+\.[0-9]+/{printf "\n"}{printf [=11=]}' filename
演示:
$ awk '{sub(/\r$/,"")}/^[0-9]+\.[0-9]+/{printf "\n"}{printf [=12=]}' 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
组合开始时,只打印一个回车符return并继续记录处理。{printf [=20=]}
:对于剩余记录或那些不是以数字开头的记录只打印[=21=]
没有换行符。最后,将马车 return 放在数字前面并忽略其余部分就可以了。