如何使用 sed 删除双换行符?

Sam*_*rts 6 linux bash sed

我试过:

sed -i 's/\n+/\n/' file
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

我仍然想要单行中断。

输入:

abc

def


ghi




jkl
Run Code Online (Sandbox Code Playgroud)

期望的输出:

abc

def

ghi

jkl
Run Code Online (Sandbox Code Playgroud)

pot*_*ong 5

这可能对你有用(GNU sed):

sed '/^$/{:a;N;s/\n$//;ta}' file
Run Code Online (Sandbox Code Playgroud)

这会将多个空行替换为单个空行。

但是,如果您想在每个非空行之后放置一个空行,则:

sed '/^$/d;G' file 
Run Code Online (Sandbox Code Playgroud)

它将删除所有空行,并且仅将一个空行附加到非空行。


anu*_*ava 3

使用 awk(gnu 或 BSD)您可以执行以下操作:

awk -v RS= -v ORS='\n\n' '1' file
abc

def

ghi

jkl
Run Code Online (Sandbox Code Playgroud)

还使用perl

perl -pe '$/=""; s/(\n)+/$1$1/' file
abc

def

ghi

jkl
Run Code Online (Sandbox Code Playgroud)