我有一个像下面这样的unix文件
abcdge
efg
bh
ggh
bhj
mkl
我想更改该文件并将其设置为:
abcdge
efg
bhggh
bhj
mkl
意思是:在每个空行之后,下一行应该附加到上一行。我怎样才能实现它?
答案1
$ sed -e '
$!N;$q;N
s/\n\n//
P;D
' file
在模式空间中保留 3 行,并在看到连续的换行符时将其删除。
答案2
这将在每个 UNIX 机器上的任何 shell 中使用任何 awk 来工作:
$ awk '1;END{print"\n"}' RS= ORS= file
abcdge
efg
bhggh
bhj
mkl
答案3
如果我理解你,也许这就是你正在寻找的:
sed -z 's/\n\n//g' file
输出:
abcdge
efg
bhggh
bhj
mkl
答案4
<file awk '
{
if (n && $0!="")
printf "\n"
if ($0=="")
n=""
else
{n=1; p=1; printf "%s", $0;}
}
END {if (p) printf "\n"}
'
打印的每个非空行都没有终止换行符。在此之前,如果当前行不为空并且前一行也不为空,则会打印换行符;所以在这种情况下,前一行就完成了。
最后,如果打印了任何非空行,则一个换行符将终止最后一个不完整的行并使其完整。
n
和p
是分别指示“非空最后一行”和“打印了某些内容”的标记。
连续的空行相当于一个空行。我不知道这种行为是否是你想要的。
该溶液应能很好地用作过滤器(即在管道中)。如果您需要它来修改输入文件,请检查以下内容:将修改保存到位awk
。