Pourquoi mon script Bash ajoute & lt; feff & gt; au début des fichiers?
J'ai écrit un script qui nettoie .les fichiers csv, enlevant un peu de mal virgules et les mauvaises citations (mauvais, signifie qu'ils cassent un programme de la maison que nous utilisons pour transformer ces fichiers) à l'aide de 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
Ici est propre.sed:
s/\",\"/XXX/g;
:a
s/,//g
ta
s/XXX/\",\"/g;
Puis il supprime les fichiers temporaires et à l'alto, nous avons un nouveau fichier qui commence par le mot "devis" que nous pouvons utiliser pour nos autres processus.
Ma question est:
Pourquoi dois-je faire un sed déclaration de supprimer le feff balise dans le fichier temp? Le fichier d'origine ne l'a pas, mais il apparaît toujours dans le remplacement. Au début, je pensais que le pc était à l'origine de ce mais si j'ai mis dans le sed déclaration à retirer avant le cp, il n'est pas là.
Peut-être que je suis juste en manque de quelque chose...
source d'informationauteur SDGuero
Vous devez vous connecter pour publier un commentaire.
U+FEFF est le point de code pour un marque d'ordre d'octet. Vos fichiers les plus susceptibles de contenir des données enregistrées au format UTF-16 et de la NOMENCLATURE a été corrompu par votre "processus de nettoyage" qui est le plus susceptible attend ASCII. Ce n'est probablement pas une bonne idée de supprimer la NOMENCLATURE, mais au lieu de le fixer vos scripts afin de ne pas corrompre en premier lieu.
Pour se débarrasser de ces dans GNU emacs:
Il est aussi un moyen de convertir des fichiers avec le DOS de la ligne de résiliation de la convention d'Unix en ligne de résiliation de la convention.