我在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`选项,我没有得到错误,但它不起作用任
答案 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"