Regex 使用命令行删除逗号前后的空格(不是单词之间的空格)

Regex 使用命令行删除逗号前后的空格(不是单词之间的空格),regex,csv,sed,Regex,Csv,Sed,我有一个CSV文件,它是使用pull_data$a$b>$id.CSV创建的 来自输出的行的示例为: 1041894,30/01/2013,31/01/2013,A Customer Limited , 2, 1,PR14, PR14 , 104 An Item ,247 An Item 这是我的情况: 1041894,30/01/2013,31/01/2013,A Customer Limited , 2, 1,PR14, PR14 , 104 An Item ,247 An Item

我有一个CSV文件,它是使用
pull_data$a$b>$id.CSV
创建的

来自输出的行的示例为:

1041894,30/01/2013,31/01/2013,A Customer Limited , 2, 1,PR14, PR14 , 104 An Item ,247 An Item
这是我的情况:

1041894,30/01/2013,31/01/2013,A Customer Limited , 2, 1,PR14, PR14 , 104 An Item ,247 An Item
  • 我需要删除逗号之后或之前的所有空格,但不包括单词之间的空格

  • 我需要每一行如下所示,如果可能,我希望使用sed:

1041894,30/01/2013,31/01/2013,A客户有限公司,2,1,PR14,PR14104 A项目,247 A项目

我尝试了sed's/,\+\\\+,/,/g',但这并没有删除逗号前后的所有空格,它只删除了一些空格。

一些如下:

awk '{gsub(/[[:space:]]*,[[:space:]]*/,",")}1' file
它会删除

编辑:添加了
[[:space:]
以删除所有类型的空格。

一些类似于:

awk '{gsub(/[[:space:]]*,[[:space:]]*/,",")}1' file
它会删除

编辑:添加了
[[:space:]
以删除所有类型的空格。

尝试以下操作:

sed -i.bak -e 's/,[[:space:]]\+/,/g' -e 's/[[:space:]]\+,/,/g' file
或者这个awk:

awk -F '[[:space:]]*,[[:space:]]*' '{$1=$1}1' OFS=, file
更新: OP可能有空格,而不仅仅是空格:

还可以尝试以下方法:

sed -i.bak 's/[[:space:]]*,[[:space:]]*/,/g' file
试试这个:

sed -i.bak -e 's/,[[:space:]]\+/,/g' -e 's/[[:space:]]\+,/,/g' file
或者这个awk:

awk -F '[[:space:]]*,[[:space:]]*' '{$1=$1}1' OFS=, file
更新: OP可能有空格,而不仅仅是空格:

还可以尝试以下方法:

sed -i.bak 's/[[:space:]]*,[[:space:]]*/,/g' file
使用awk

awk 'BEGIN{FS=OFS=","} {for (i=1;i<=NF;i++) gsub(/^[ \t]+|[ \t]+$/, "", $i)}1' file
awk'BEGIN{FS=OFS=“,”}{for(i=1;i使用awk

awk 'BEGIN{FS=OFS=","} {for (i=1;i<=NF;i++) gsub(/^[ \t]+|[ \t]+$/, "", $i)}1' file
awk'BEGIN{FS=OFS=“,”}{for(i=1;i这可能适合您(GNU-sed):

这可能适用于您(GNU-sed):


可能的重复下面有一些正确答案,但如果字段有时被引用(可能在某些数据中有逗号),则使用正则表达式完全处理这一问题会变得更加困难。下面有一些正确答案的可能重复,但如果字段有时被引用(可能有些数据中有逗号)然后这就很难用正则表达式完全处理了就像你在我的
sed
,@Jotne?@Jotne:我在尝试了各种测试后发布了3个备选方案。其中一个或两个可能看起来相似,因为方法相似。@anubhava我尝试了
sed-I.bak的/*,*/,/g'文件
,但它没有删除文件中的任何空格?我仍然有
,1
等。应该可以工作.您是否尝试过我发布的其他两个选项?您的新正则表达式看起来与我发布的非常相似;)就像你在我的
sed
,@Jotne?@Jotne:我在尝试了各种测试后发布了3个备选方案。其中一个或两个可能看起来相似,因为方法相似。@anubhava我尝试了
sed-I.bak的/*,*/,/g'文件
,但它没有删除文件中的任何空格?我仍然有
,1
等。应该可以工作。您是否尝试过我发布的其他两个备选方案?我认为您需要在gsub()@BMW Copy and paste error中运行函数,示例确实有正确的
()
谢谢。我认为您需要在gsub()@BMW Copy and paste error中运行函数,示例确实有正确的
()
谢谢。