sed:在给定行(或最后一行)替换换行符

sed:在给定行(或最后一行)替换换行符

我有一个如下所示的文件:

a,b,c,d,e,f
1,2,3,4,5,6
7,8,9,0,1,2

我需要用逗号连接最后两行,如下所示:

a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2

问题是这一切都在一个循环内,该循环将向该文件添加两行新行,例如

a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2
0,9,8,7,6,5
4,3,2,1,0,9

现在我需要做同样的事情文件结束的最后一行

a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2
0,9,8,7,6,5,4,3,2,1,0,9

所以,简而言之,我需要更换最后的文本文件的新行,带有逗号,但只有最后一行,因为正在添加行。

我已经尝试了几种方法,但它们不起作用。最后一个是sed '$!N;s/\n/,/' dna.data,但它适用于所有带有换行符的行。

有任何想法吗?

答案1

如果文件不以换行符结尾,您只需处理最后一个替换命令(使用 标志-i就地sed更改文件):

$ sed '$!N;$s/\n/,/' dna.data
a,b,c,d,e,f
1,2,3,4,5,6,7,8,9,0,1,2
0,9,8,7,6,5,4,3,2,1,0,9  

如果文件以换行符结尾,您可以使用编辑器ex

$ ex dna.data
$-1s/\n/,/
1,2,3,4,5,6,7,8,9,0,1,2
x

或在一行中

echo -e '$-1s/\\n/,/\nx' | ex dna.data

答案2

这可能对你有用(GNU sed):

sed -i '$!N;$s/\n/,/;P;D' file

相关内容