gpt4 book ai didi

linux - 为什么我的 Bash 脚本将 添加到文件的开头?

转载 作者:IT王子 更新时间:2023-10-29 00:25:22 26 4
gpt4 key购买 nike

我编写了一个脚本来清理 .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 语句,它就不存在了。

也许我只是错过了什么......

最佳答案

U+FEFF 是 byte order mark 的代码点.您的文件很可能包含以 UTF-16 格式保存的数据,并且 BOM 已被您的“清理过程”损坏,这很可能需要 ASCII。删除 BOM 可能不是一个好主意,而是首先修复您的脚本以防止损坏它。

关于linux - 为什么我的 Bash 脚本将 <feff> 添加到文件的开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com