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

时间:2014-02-05 11:19:12

标签: regex csv sed

我有一个使用pull_data $a $b > $id.csv创建的CSV文件。

例如输出中的一行是:

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 Customer Limited,2,1,PR14,PR14,104 An Item,247 An Item

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

4 个答案:

答案 0 :(得分:4)

试试这个sed:

sed -i.bak -e 's/,[[:space:]]\+/,/g' -e 's/[[:space:]]\+,/,/g' file

或者这个awk:

awk -F '[[:space:]]*,[[:space:]]*' '{$1=$1}1' OFS=, file

更新

OP可能有空格而不仅仅是空格:

尝试这个sed:

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

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed 's/\s*,\s*/,/g' file

答案 2 :(得分:0)

有些人喜欢这样:

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

echo "1041894,30/01/2013,31/01/2013,A Customer Limited , 2, 1,PR14 ,PR14 ,104 An Item ,247 An Item" | awk '{gsub(/[[:space:]]*,[[:space:]]*/,",")}1'
1041894,30/01/2013,31/01/2013,A Customer Limited,2,1,PR14,PR14,104 An Item,247 An Item

它会删除,

之前或之后的所有空格

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

答案 3 :(得分:0)

使用awk

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