Strip « inhabituelles » caractères unicode
Dans les commentaires que vous mentionnez que vous voulez bloquer les caractères de contrôle tout en gardant les caractères grecs, donc la solution ci-dessous avec tr ne convient pas. Une solution est sed
qui offre un support Unicode et leur classe [[:alpha:]]
correspond également à des caractères alphabétiques en dehors des ascii. Vous devez d'abord définir LC_CTYPE
pour spécifier les caractères qui appartiennent à la plage [[:alpha:]]
. Pour l'allemand avec trémas, c'est par ex.
LC_CTYPE=de_DE.UTF-8
Ensuite, vous pouvez utiliser sed
pour enlever tout ce qui est pas une lettre ou de ponctuation:
sed 's/[^[:alpha:];\ [email protected]]//g' < junk.txt
Qu'est-ce \ [email protected]
fait: Il correspond à tous les caractères de la plage ascii entre l'espace et @
(voir ascii table Sed a une classe [[:punct:]]
, mais malheureusement, cela correspond également à beaucoup d'ordure, donc \ [email protected]
est nécessaire
Vous devrez peut-être jouer un peu avec LC_CTYPE
, en le mettant à utf-8
seulement je pourrais correspondre aux caractères grecs, mais pas japonais.
Si vous ne vous préoccupez ascii
Si vous ne vous préoccupez des personnages réguliers ascii vous pouvez utiliser tr
: D'abord, vous convertissez le fichier à un codage « un octet par caractère », puisque tr
ne comprend pas les caractères multi-octets, par exemple en utilisant iconv
. Puis, je vous conseille d'utiliser une approche de liste blanche (par opposition à l'approche de la liste noire que vous avez dans votre question) car il est beaucoup plus facile d'indiquer ce que vous voulez conserver que ce que vous voulez filtrer.
Cette commande devrait le faire:
iconv -c -f utf-8 -t latin1 < junk.txt | tr -cd '\11\12\40-\176'
cette ligne ..
- convertit à latin1 (seul octet par char) et ne tient pas compte de tous les caractères ci-dessus codepoint 127 (qui sont les caractères spéciaux, mais il faut savoir, que les bandes loin aussi des choses comme des caractères umlaut ou spéciaux dans votre langue que vous voudrez peut-être pour garder!)
- supprime tous les caractères qui sont en dehors de cette liste blanche:
\11\12\40-\176
. Les chiffres sont octaux. Regardez par exemple this ascii table. \11
est tab
, \12
est le retour chariot. \40-\176
est tous les caractères qui sont généralement considérés comme "normal"
Dos2Unix ne fonctionne pas non plus. l'erreur indique «problèmes de conversion de fichier» – user2975559
dans quel codage est le fichier? Pouvez-vous coller le fichier sur pastebin.com? – hansaplast
le codage du fichier est utf-8. Désolé, je n'ai pas pu placer le fichier. – user2975559