Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何使用sed合并两个特定行?_Unix_Sed_Solaris - Fatal编程技术网

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
也不能工作,因为solaris
sed
不能像GNU和其他变体那样识别
\n
字符。@jaypal那么
^M
(ctrl-v return)在solaris上也能工作吗?好的,sed和perl示例就我的目的而言已经足够好了。@CodeSlave我有一个