更智能地删除不必要的WhiteSpace CSV

时间:2013-06-20 06:20:22

标签: regex csv sed grep

我有一个逗号分隔文件(CSV),类似于以下

1, 2, 3, "Test, Hello"
4, 5, 6, "Well, Hi There!"

我需要能够将上面的Linux命令行理想地转换为

1,2,3,"Test, Hello"
4,5,6,"Well, Hi There!"

现在,我知道其他一些解决方案,例如: Removing spaces after all commas

然而,这并不知道用双引号括起来的字符串。例如,页面上的解决方案:

sed -e 's/\s\+,/,/g'

...可生产

1,2,3,"Test,Hello"
4,5,6,"Well,Hi There!"

这不是同样的!此方法删除了封闭字符串中的空格。有没有人知道如何在不破坏用双引号括起的内容的情况下删除空格?或者,如果这太困难了,而不是特定的领域?

1 个答案:

答案 0 :(得分:2)

perl -lne 'if(/(.*?\")(.*)/){$b=$2;$a=$1;$a=~s/,[\s]/,/g;print "$a$b"}' your_file

测试如下:

> cat temp
1, 2, 3, "Test, Hello"
4, 5, 6, "Well, Hi There!"
>
> perl -lne 'if(/(.*?\")(.*)/){$b=$2;$a=$1;$a=~s/,[\s]/,/g;print "$a$b"}' temp
1,2,3,"Test, Hello"
4,5,6,"Well, Hi There!"
> 

或者您可以使用awk(因为我正在使用solaris,所以我使用了nawk):

nawk -F'\"' -v OFS='\"' '{gsub(/ /,"",$1)}1' your_file