如何从unix中的csv文件中删除特殊字符

时间:2013-10-02 20:12:19

标签: unix sed awk special-characters bcp

我很难从csv文件中删除特殊字符。

我的输出表中的这个过程我有一些像这样的数据

Col1 
BC,BS/APP 

像这样我有另外10列,当我尝试使用patindex时,有机会获得特殊字符我只能删除第一个特殊字符并删除我需要使用的其他字符很难做到这一点。

所以我尝试删除bcping数据到csv文件后面的特殊字符是我正在使用的bcp命令

bcp_with_error_check tempdb..STT_IM166_WEB_MWE out temp.dat -SSVR -UUSR -PPWD -c -b1000 -t'","'
sed -e 's/,"0/,="0/g;s/,"1/,="1/g;s/,"2/,="2/g;s/,"3/,="3/g;s/,"4/,="4/g;s/,"5/,="5/g;s/,"6/,="6/g;s/,"7/,="7/g;s/,"8/,="8/g;s/,"9/,="9/g'temp.dat > temp1.dat
sed -e 's/$/"/g' temp1.dat > temp2.dat
sed -e 's/^/="/g' temp3.dat >>Filename.csv

我的问题是,因为它是CSV文件,如果我删除逗号(,)考虑作为特殊字符,它会扰乱文件布局。

我可以在数据库中单独替换逗号,但我没有得到命令单独排除逗号并删除其他字符。请帮帮我,我非常需要这个命令

1 个答案:

答案 0 :(得分:1)

我不清楚你真正追求的是什么,但至少你可以将你的第一个sed命令缩小10倍:

sed -e 's/,"\([0-9]\)/,="\1/g' temp.dat > temp1.dat

模式查找逗号,双引号和数字(并记住数字是什么);它被逗号,等号,双引号和记住的数字取代。

除非您有不同临时文件的原因,否则可以将三个sed命令合并为一个:

sed -e 's/,"\([0-9]\)/,="\1/g' -e 's/$/"/g' -e 's/^/="/g' temp.dat >>Filename.csv

如果省略bcp_with_error_check参数,如果out temp.dat将写入标准输出,那么您不需要任何临时文件(这通常是个好主意)。请注意,如果两个人在同一目录中无辜地同时运行此命令,他们就会践踏彼此的临时文件(或因为无法解决问题而遇到问题)。没有临时文件,您只需要担心最终文件名Filename.csv

但是,这并没有解决您的主要问题 - 它只会改进您的脚本。