我有一个使用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'
,但这并没有删除逗号之后或之前的所有空格,只删除了一些空格。
答案 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