我编写了一个脚本来清理 .csv 文件,使用 sed 删除一些坏逗号和坏引号(坏,意味着它们破坏了我们用来转换这些文件的内部程序):
# remove all commas, and re-insert the good commas using clean.sed
sed -f clean.sed $1 > $1.1st
# remove all quotes
sed 's/\"//g' $1.1st > $1.tmp
# add the good quotes around good commas
sed 's/\,/\"\,\"/g' $1.tmp > $1.tmp1
# add leading quotes
sed 's/^/\"/' $1.tmp1 > $1.tmp2
# add trailing quotes
sed 's/$/\"/' $1.tmp2 > $1.tmp3
# remove utf characters
sed 's/<feff>//' $1.tmp3 > $1.tmp4
# replace original file with new stripped version and delete .tmp files
cp -rf $1.tmp4 quotes_$1
这是 clean.sed:
s/\",\"/XXX/g;
:a
s/,//g
ta
s/XXX/\",\"/g;
然后它删除临时文件和中提琴,我们有一个以单词“quotes”开头的新文件,我们可以将其用于我们的其他进程。
我的问题是:
为什么我必须使用 sed 语句来删除该临时文件中的 feff 标签?原始文件没有它,但它总是出现在替换中。起初我以为是 cp 造成的,但如果我在 cp 之前放入 sed 语句来删除,它就不存在了。
也许我只是错过了一些东西......