【问题标题】:Remove spaces between commas using command line使用命令行删除逗号之间的空格
【发布时间】:2014-02-04 13:06:30
【问题描述】:

如果我有类似的文件

1050505,Some Customer,  1  ,  1  ,Some Order, 5  ,  6  Item
1050505,Some Customer,  1  ,  1  ,Some Order, 5  ,  6  Item
1050505,Some Customer,  1  ,  1  ,Some Order, 5  ,  6  Item
1050505,Some Customer,  1  ,  1  ,Some Order, 5  ,  6  Item
1050505,Some Customer,  1  ,  1  ,Some Order, 5  ,  6  Item

但我需要去除空格,除非它们位于单词之间(即在逗号之后或之前去除空格)。

1050505,Some Customer,1,1,Some Order,5,6  Item

通过标准命令行执行此操作的最简单方法是什么?

【问题讨论】:

    标签: linux


    【解决方案1】:

    您可以使用几个工具来做到这一点。 Perl:

    perl -pe 's/\s*,\s*/,/g;' file.txt
    

    sed:

    sed 's/,\s\+/,/g; s/\s\+,/,/g' < file.txt
    

    awk:

    awk '{gsub(", +", ",", $0); gsub(" +,", ",", $0); print $0}' file.txt
    

    【讨论】:

    • 注意awk ... fileawk ... &lt; file 相同。不需要间接。
    • sed 命令可以缩短为sed 's/, \+\| \+,/,/g'
    • sed 的文件位也是如此,但这有什么关系呢? :-p
    • 但是,如果您添加 -i 标志并且不重定向文件,它将在原地编辑它(更改将保留)。
    • 我说没关系,因为你可以通过任何一种方式重定向到输出文件
    【解决方案2】:

    一个简单的sed 命令就可以做到:

    sed -i 's/,[ ]*/,/g' /path/to/file
    

    【讨论】:

      【解决方案3】:
      perl -pi -e 's/[\s]+,/,/g;s/,[\s]+/,/g' your_file
      

      【讨论】:

        猜你喜欢
        • 2014-03-01
        • 2018-10-17
        • 1970-01-01
        • 2019-04-11
        • 1970-01-01
        • 2017-12-24
        • 2014-10-31
        • 2014-03-24
        • 2015-11-15
        相关资源
        最近更新 更多