Skip/supprimer des caractères non-ascii avec sed
Puce,Dirkland,DrobæSphere Inc,[email protected],états-unis
J'ai essayé d'utiliser sed pour modifier les adresses e-mail dans un .csv, mais la ligne au-dessus de garde de déclenchement-moi, en utilisant des commandes telles que:
sed -i 's/[\d128-\d255]//' FILENAME
à partir de cette question stackoverflow
ne semble pas fonctionner comme je l'obtenir "invalid classement caractère' erreur.
Idéalement, je ne veux pas changer que le combiné AE caractère à tous, j'ai plutôt sed simplement sauter à droite sur elle comme je ne suis pas en train de manipuler du texte, mais plutôt les adresses e-mail. Tant que l'AE est là, si elle provoque mon sed de substitution à l'échec après une ligne, supprimer le caractère et les processus de l'ensemble du dossier de l'amende.
Des idées?
OriginalL'auteur xref | 2011-12-20
Vous devez vous connecter pour publier un commentaire.
Cela pourrait fonctionner pour vous (GNU sed):
Puis faire ce que vous avez à faire et après de revenir faire:
Si vous avez délicate des caractères dans les chaînes et que vous voulez comprendre comment
sed
les voit utiliser lel0
de commande (voir ici). Également très utile pour le débogage difficile expressions régulières.l0
. Il y a un autresedsed.py
script trop, ici. Utile pour inspecterpattern
ethold
espaces. Pourrait ne pas aider dans ce cas, mais un utile outil de débogage n'en est pas moins. 🙂que sed -n 'l0' commande est intéressant, ce qu'il imprime de l'entreprise est: Drob\357\277\275Sphere Inc
et je ne peux toujours pas les exemples ci-dessus pour travailler avec elle, peut-être le personnage (ce qui montre qu'une AE dans Windows LibreOffice mais nulle part ailleurs) est en fait un caractère spécial en disant qu'il ne peut pas être représentée en unicode? fileformat.info/info/unicode/char/fffd/index.htm
Je n'ai jamais eu les réponses sur cette page afin de fonctionner parfaitement, mais potong la solution m'a procuré la plus proche et la commande offert plus de détails sur ce qui n'allait pas
N'aide pas à supprimer tous les caractères non-ASCII. Permet de supprimer une donnée en exemple.
OriginalL'auteur potong
Aussi, cela agit comme dos2unix
ü
est imprimable, mais pas de l'ASCII.OriginalL'auteur jcalfee314
Je suis venu ici pour essayer cette commande sed
s/[\x00-\x1F]//g;
, ce qui m'a donné le même message d'erreur.dans ce cas, il suffit simplement de supprimer le
\x00
de la collation, produisants/[\x01-\x1F]//g;
Malheureusement, il semble que tous les caractères ci-dessus et notamment
\x7F
et quelques autres sont interdits, comme on peut le voir avec ce petit script:Noter que le problème est que l'utilisation de ces caractères pour spécifier une plage. Vous pouvez toujours en faire la liste de tous les manuellement ou par le script. E. g. pour en revenir à votre exemple:
deviendrait
qui pourrait se traduire:
Invalid collation character
erreur.OriginalL'auteur mxmlnkn
Comment sur l'utilisation de
awk
pour cela. Nous avons configuré le Séparateur de Champ pour rien. Puis une boucle sur chaque personnage. Utiliser unif loop
pour vérifier si elle correspond à noscharacter class
. Si elle ne nous l'imprimer autre chose que nous ignorons.Test:
Mise à jour:
J'ai ajouté printf "\n" après la boucle pour garder les lignes distinctes.
J'ai mis à jour la réponse. Espérons que ça aide!
Si vous ne voulez e-mail extraites à partir de votre fichier d'entrée puis
awk
pouvez le faire en un clin d'oeil sans aucun complexeregex
. Permettez-moi de savoir comment cela fonctionne.OriginalL'auteur jaypal singh
Dans ce cas, il y a un moyen de simplement les ignorer non-ASCII caractères, de ne pas s'embêter avec de l'enlever.
Voir https://bugzilla.redhat.com/show_bug.cgi?id=440419 et Va sed (et d'autres) corruption de la non-ASCII fichiers?.
OriginalL'auteur Vadzim