我有一个看起来像这样的文件
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
我如何才能得到我想要的结果?
答案 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