【问题标题】:Replace newline with comma and space to produce 1 line output用逗号和空格替换换行符以产生 1 行输出
【发布时间】:2019-07-03 06:26:55
【问题描述】:

示例文件

[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 个空格的第三次尝试也产生与第二次尝试相同的输出

[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 ~]$

期望的输出

, 后面的 1 个空格,像这样...

10.1.1.1, 10.1.1.2, 10.1.1.3

【问题讨论】:

    标签: linux cygwin tr


    【解决方案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'
    

    【讨论】:

    • 谢谢,但不起作用。 sed 没有改变任何东西,而 perl 的输出与尝试 2 和 3 类似
    • 你能确保它不起作用。我在我机器上的不同 shell 上尝试过它,它给出了你想要的输出......我会研究一下看看另一种方式
    • 你可以试试这个perl -pe 's/\n/, /g' ip.txt
    • sed ':a;N;$!ba;s/\n/, /g' ip.txt 也试试这个。至于删除最后一个逗号,你不能,因为它也会替换文件末尾的最后一个 \n 字符。但让我也调查一下 :)
    • 哇.. 最新的sed 命令有效!谢谢。请更新您的答案,以便其他人也能看到它。我会接受的。 sed ':a;N;$!ba;s/\n/, /g' ip.txt
    【解决方案2】:

    tr 可用于将一个字符替换为一个。

    您不能用两个字符替换。

    您可以使用 sed 或 awk 进行搜索

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2012-07-14
      相关资源
      最近更新 更多