如何用sed合并两个特定的行?

时间:2014-08-12 16:53:40

标签: unix sed solaris

我有一个看起来像这样的文件

line one
line two
line three
line four

我希望它看起来像这样(我希望第2和第3行合并为一个)

line one
line two line three
line four

我尝试了以下内容,基于我的研究应该做我想做的事情:

$ sed '2s/\n/ /' test.txt > test2.txt

但是test2.txt看起来像这样

line one
line two
line three
line four

我在Solaris上看到一些对它的引用与Linux不同。这是我服务器的详细信息

$ uname -a
SunOS myserver 5.10 Generic_142909-17 sun4u sparc SUNW,Sun-Fire-V490

我如何才能得到我想要的结果?

1 个答案:

答案 0 :(得分:3)

根据链接问题中的答案,此sed应该有效:

sed '2N;s/\n/ /' file

2N表示在第二行,将下一行追加到模式空间。这导致模式空间包含line two\nline three。替换(用空格替换换行符\n)适用于文件中的每一行,但仅在此处有效。

否则,这个awk会做到这一点:

awk 'NR==2{printf("%s ",$0);next}1' file

在第二行,使用printf打印该行的内容,后跟一个空格。 next跳到下一行。对于所有其他行,最后的1实际上是{print $0}块(打印行)。

可替换地:

awk '{printf("%s%s",$0,NR==2?OFS:ORS)}' file

默认情况下,OFS为空格,ORS为换行符

或者有点perl:

perl -pe 's/\n/ / if $. == 2' file

$.是行号。用换行符替换第二行的空格。

输出(在我的系统上使用上述任何方法):

line one
line two line three
line four