0

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

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

Col1 
BC,BS/APP 

像这样,当我尝试使用 patindex 时,我还有另外 10 列有可能获得特殊字符去做 。

因此,我尝试在将数据 bcp 到 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 文件,如果我删除逗号 (,) 考虑作为特殊字符它会干扰文件布局。

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

4

1 回答 1

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需要担心最终文件名。

但是,这并不能解决您的主要问题——它只是改进了您的脚本。

于 2013-10-03T03:24:17.200 回答