关于正则表达式:更智能地删除不必要的WhiteSpace CSV

Smarter Removing Unnecessary WhiteSpace CSV

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

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

我需要能够将上述内容从Linux命令行理想地转换为

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

现在,我知道一些其他解决方案,例如:
删除所有逗号后的空格

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

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

产生...

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

不是一样的!此方法删除了包含在字符串中的空格。有谁知道如何删除空格而不破坏双引号中的空格?还是如果那太难了,请改为使用特定字段?


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

经过以下测试:

1
2
3
4
5
6
7
8
> 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):

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