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'