如何删除所有单个出现的新行“\ n”,但不删除多行

时间:2013-09-26 07:08:29

标签: replace sed

我想在文件中删除所有\n代码,但不删除\n\n代码

以下是一个例子:

this
is 

a test

应该是:

thisis

a test

我曾尝试使用sed ':a;N;s/\n/g'进行操作,但没有成功。

4 个答案:

答案 0 :(得分:3)

sed的一种方法是:

sed ':a;$!{N;ba};s/\([^\n]\)\n\([^\n]\)/\1\2/g' file
thisis

a test

答案 1 :(得分:3)

Perl解决方案:

perl -pe '/./ and chomp or print "\n"' file

答案 2 :(得分:2)

使用awk您可以尝试:

awk '{$1=$1}1' RS="\n\n" ORS="\n\n" file
this is

a test

修改:另一个awk变体

awk '{printf "%s ",$0} !NF {print "\n"}' file

最后一个缩短了一些:

awk '{printf "%s "(!NF?"\n\n":""),$0}' file

如果您不喜欢字段之间的空格并获取thisis,只需删除%s之后的空格:

awk '{printf "%s"(!NF?"\n\n":""),$0}' file
or
awk '{printf (!NF?RS RS:x) $0}' file

答案 3 :(得分:2)

这可能适合你(GNU sed):

sed ':a;$!N;/\n$/!s/\n//;ta' file