如何使用sed删除CSV文件中的报价和空格数字?

时间:2014-07-28 18:25:38

标签: regex sed

我在CSV文件中有一些数字,我正在尝试删除它周围的引号和空格。

输入: 1," 23","45","67 ",89

预期输出:1,23,45,67,89

我正在尝试删除:

sed -r -e 's#\"[ ]*\([0-9]+\)[ ]*\"#\1#g' file.csv

但是我收到错误“sed:-e expression#1,char 38:s' command's RHS", if I remove the上无效的引用\ _1 - r`选项,我没有得到错误,但它不起作用任

2 个答案:

答案 0 :(得分:2)

Tom Fenech在评论中提供了关键指针:

OP命令的唯一问题是一个小的语法问题

由于sed -r 一起使用以激活 扩展正则表达式 { {1}}和( - 用于定义捕获组 - 不得为) - 转义
(相反,当\使用 sed时,必须使用基本正则表达式,需要进行此类转义。)

因此,正确的表单(-r之前\(已删除):

)

如果您希望该命令也适用于OSX,请使用sed -r 's#\"[ ]*([0-9]+)[ ]*\"#\1#g' file.csv 代替-E

或者,为了获得最大的可移植性(POSIX合规性),您可以使用-r代替\{1,\}并完全取消+开关:

-r

答案 1 :(得分:1)

您可以尝试以下perl命令,

$ echo '1," 23","45","67 ",89, "foo" , "bar" ' | perl -pe 's/[" ]+(\d+)[ "]+/\1/g'
1,23,45,67,89, "foo" , "bar"