使用sed去除数值周围的引号:CSV文件解析需求
针对CSV数值列去引号的sed解决方案
刚好碰到过类似的CSV处理场景,给你一个精准的sed命令,完美适配你这种「仅第二列保留引号字符串,其余数值列要去掉误加的引号」的需求:
sed -E 's/^"(-?[0-9]+\.?[0-9]*)"/\1/; s/,"(-?[0-9]+\.?[0-9]*)"/,\1/g' your_input.csv
命令拆解:
- 第一个替换规则
s/^"(-?[0-9]+\.?[0-9]*)"/\1/:专门处理第一列开头的引号数值,比如把"-0.00100"直接转成-0.00100。 - 第二个替换规则
s/,"(-?[0-9]+\.?[0-9]*)"/,\1/g:处理除第二列外的所有后续列——匹配逗号后紧跟的「引号包裹的数值」,把, "-45.67"这种格式改成,-45.67,全局替换确保所有符合条件的列都被处理。
适配扩展:
如果你的数值还包含科学计数法(比如"1.23e-4"),可以把正则调整成支持科学计数的版本:
sed -E 's/^"(-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9]+)?)"/\1/; s/,"(-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9]+)?)"/,\1/g' your_input.csv
效果示例:
原CSV行:
"-0.00100","BAR",999,"123.45","-6.78e-2"
处理后输出:
-0.00100,"BAR",999,123.45,-6.78e-2
可以看到第二列的"BAR"完全保留,其他数值列的引号都被干净移除了,刚好解决你提到的第444、555行的问题。
内容的提问来源于stack exchange,提问作者Little Code
相关产品推荐
相关产品推荐

