Unix 如何使用sed合并两个特定行?
我有一个像这样的文件Unix 如何使用sed合并两个特定行?,unix,sed,solaris,Unix,Sed,Solaris,我有一个像这样的文件 line one line two line three line four 我希望它看起来像这样(我希望第2行和第3行合并为一行) 我尝试了以下方法,基于我的研究,我应该做我想做的事情: $ sed '2s/\n/ /' test.txt > test2.txt 然而,test2.txt看起来是这样的 line one line two line three line four 我看到一些关于它的引用在Solaris和Linux上有所不同。这是我的服务器的详细
line one
line two
line three
line four
我希望它看起来像这样(我希望第2行和第3行合并为一行)
我尝试了以下方法,基于我的研究,我应该做我想做的事情:
$ 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
我如何才能让它给出我想要的结果?根据链接问题中的答案,此sed应该可以工作:
sed '2N;s/\n/ /' file
2N
表示在第二行上,将下一行追加到模式空间。这将导致模式空间包含第二行\n第三行。替换(将换行符\n
替换为空格)适用于文件中的每一行,但仅在此处有效
否则,此awk将完成以下任务:
awk 'NR==2{printf("%s ",$0);next}1' file
在第二行,使用printf
打印该行的内容,后跟空格<代码>下一行
跳到下一行。对于所有其他行,末尾的1
实际上是一个{print$0}
块(用于打印该行)
或者:
awk '{printf("%s%s",$0,NR==2?OFS:ORS)}' file
其中,OFS
默认为空格,ORS
为换行符
或者一点perl:
perl -pe 's/\n/ / if $. == 2' file
$。
是行号。用换行符替换第二行的空格
输出(在我的系统上使用上述任何方法):
根据链接问题中的答案,此sed应适用于:
sed '2N;s/\n/ /' file
2N
表示在第二行上,将下一行追加到模式空间。这将导致模式空间包含第二行\n第三行。替换(将换行符\n
替换为空格)适用于文件中的每一行,但仅在此处有效
否则,此awk将完成以下任务:
awk 'NR==2{printf("%s ",$0);next}1' file
在第二行,使用printf
打印该行的内容,后跟空格<代码>下一行
跳到下一行。对于所有其他行,末尾的1
实际上是一个{print$0}
块(用于打印该行)
或者:
awk '{printf("%s%s",$0,NR==2?OFS:ORS)}' file
其中,OFS
默认为空格,ORS
为换行符
或者一点perl:
perl -pe 's/\n/ / if $. == 2' file
$。
是行号。用换行符替换第二行的空格
输出(在我的系统上使用上述任何方法):
根据链接问题中的答案,此sed应适用于:
sed '2N;s/\n/ /' file
2N
表示在第二行上,将下一行追加到模式空间。这将导致模式空间包含第二行\n第三行。替换(将换行符\n
替换为空格)适用于文件中的每一行,但仅在此处有效
否则,此awk将完成以下任务:
awk 'NR==2{printf("%s ",$0);next}1' file
在第二行,使用printf
打印该行的内容,后跟空格<代码>下一行
跳到下一行。对于所有其他行,末尾的1
实际上是一个{print$0}
块(用于打印该行)
或者:
awk '{printf("%s%s",$0,NR==2?OFS:ORS)}' file
其中,OFS
默认为空格,ORS
为换行符
或者一点perl:
perl -pe 's/\n/ / if $. == 2' file
$。
是行号。用换行符替换第二行的空格
输出(在我的系统上使用上述任何方法):
根据链接问题中的答案,此sed应适用于:
sed '2N;s/\n/ /' file
2N
表示在第二行上,将下一行追加到模式空间。这将导致模式空间包含第二行\n第三行。替换(将换行符\n
替换为空格)适用于文件中的每一行,但仅在此处有效
否则,此awk将完成以下任务:
awk 'NR==2{printf("%s ",$0);next}1' file
在第二行,使用printf
打印该行的内容,后跟空格<代码>下一行
跳到下一行。对于所有其他行,末尾的1
实际上是一个{print$0}
块(用于打印该行)
或者:
awk '{printf("%s%s",$0,NR==2?OFS:ORS)}' file
其中,OFS
默认为空格,ORS
为换行符
或者一点perl:
perl -pe 's/\n/ / if $. == 2' file
$。
是行号。用换行符替换第二行的空格
输出(在我的系统上使用上述任何方法):
看看这解释了为什么使用sed有点困难。您想将第二行与第三行合并,还是将第二行
与第三行
合并,而不管它们在文件中的位置如何?这是基于行号,不是行的值,这解释了为什么使用sed有点困难。您想将第二行与第三行合并,还是将第二行与第二行合并,或者将第二行与第三行合并,而不管它们在文件中的位置如何?它是基于行号,不是行的值,这解释了为什么使用sed有点困难。您想将第二行与第三行合并,还是将第二行与第二行合并,或者将第二行与第三行合并,而不管它们在文件中的位置如何?它是基于行号,不是行的值,这解释了为什么使用sed有点困难。您想将第二行与第三行合并,还是将第二行与第二行合并,或者将第二行与第三行合并,而不管它们在文件中的位置如何?它是基于行号,不是行的值i get'awk:syntax error near line 1''awk:bailing out near line 1'@codesave由于您在solaris上,请使用/usr/xpg4/bin/awk
而不是常规的awk
。另外,sed
也不能工作,因为solarissed
不能像GNU和其他变体那样识别\n
字符。@jaypal那么^M
(ctrl-v return)在solaris上也能工作吗?好的,sed和perl示例就我的目的而言已经足够好了。@CodeSlave我有一个