Linux 用逗号和空格替换换行符以生成一行输出

Linux 用逗号和空格替换换行符以生成一行输出,linux,cygwin,tr,Linux,Cygwin,Tr,样本文件 [user@linux ~]$ cat ip.txt 10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$ 第一次尝试在, [user@linux ~]$ tr '\n' ', ' < ip.txt 10.1.1.1,10.1.1.2,10.1.1.3,[user@linux ~]$ [user@linux ~]$ tr '\n' ' , ' < ip.txt 10.1.1.1 10.1.1.2 10.1.1.3 [user@linux

样本文件

[user@linux ~]$ cat ip.txt
10.1.1.1
10.1.1.2
10.1.1.3
[user@linux ~]$
第一次尝试在

[user@linux ~]$ tr '\n' ', ' < ip.txt
10.1.1.1,10.1.1.2,10.1.1.3,[user@linux ~]$
[user@linux ~]$ tr '\n' ' , ' < ip.txt
10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$
[user@linux ~]$
第三次尝试时,在
之前有1个空格,
也会产生与第二次尝试相同的输出

[user@linux ~]$ tr '\n' ' ,' < ip.txt
10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$
[user@linux ~]$
perl
输出与尝试2和3类似

[user@linux ~]$ perl -pe 's/\n/ /g' ip.txt
10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$
所需输出

后面加1个空格,
在这样一行中

10.1.1.1, 10.1.1.2, 10.1.1.3

我相信
tr
只能用另一个字符替换一个字符,不能用来插入更多字符。试试这个

sed ':a;N;$!ba;s/\n/, /g' ip.txt

如果要转义最后一个逗号,则

sed ':a;N;$!ba;s/\n/, /g' ip.txt | sed 's/\n$//g'

tr只能用于用一个字符替换一个字符

不能用两个字符替换


您可以使用sed或awk搜索,谢谢,但不起作用
sed
没有改变任何东西,而
perl
输出与尝试2和3类似,您可以确保它不起作用。我在我的机器上的不同外壳上进行了试验,它提供了您想要的输出。。。我会研究一下,看看另一种方法,你能用这个
perl-pe's/\n/,/g'ip.txt
sed]试试吗;N、 美元!文学士;s/\n/,/g'ip.txt
也可以试试这个。至于删除最后一个逗号,您不能删除,因为它还将替换文件末尾的最后一个
\n
字符。但让我也来看看:)哇。。最新的
sed
命令有效!谢谢请更新您的答案,以便其他人也能看到它。我会接受的<代码>sed”:a;N、 美元!文学士;s/\n/,/g'ip.txt
perl -pe 's/\n/, /g' ip.txt
sed ':a;N;$!ba;s/\n/, /g' ip.txt | sed 's/\n$//g'