用逗号和空格替换换行符以产生1行输出

时间:2019-07-03 06:26:55

标签: linux cygwin tr

样本文件

[user@linux ~]$ cat ip.txt
10.1.1.1
10.1.1.2
10.1.1.3
[user@linux ~]$

第一次尝试,,之后有1个空格

[user@linux ~]$ tr '\n' ', ' < ip.txt
10.1.1.1,10.1.1.2,10.1.1.3,[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 ~]$

,之前有1个空格的第3次尝试也产生了与第2次尝试相同的输出

[user@linux ~]$ tr '\n' ' ,' < ip.txt
10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$
[user@linux ~]$

更新

sed没有任何改变

[user@linux ~]$ sed 's/\n/, /g' ip.txt
10.1.1.1
10.1.1.2
10.1.1.3
[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 ~]$

所需的输出

,后面的一行中{p> 1个空格,像这样...

10.1.1.1, 10.1.1.2, 10.1.1.3

2 个答案:

答案 0 :(得分:1)

我相信tr只能将一个字符替换为另一个字符,并且不能用于插入更多字符。试试这个

sed ':a;N;$!ba;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'

答案 1 :(得分:1)

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

您不能用两个字符代替。

您可以使用sed或awk搜索