Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/02/2021, à 11:43

bergeronnette

[résolu] Remplacer caractère unicode en ligne de commande

Bonjour,
Sur le modèle de ces exemples https://www.webpreprod.com/issue/cherch … ous-linux/, je cherche à remplacer le caractère unicode U+2019 par U+0027 dans plusieurs fichiers tex.
J'ai essayé plusieurs méthodes :

find . -type f -exec sed -i -e ’s/'\8217'/'\39'/g’ {} \;
find . -type f -exec sed -i -e ’s/u"\u2019"/u"\u0027"/g’ {} \;
find . -type f -exec sed -i -e ’s/`u+2019`/`u+0027`/g’ {} \;
find . -type f -exec sed -i -e ’s/`\u2019`/`\u0027`/g’ {} \;
find . -type f -exec sed -i -e ’s/^u2019/^u0027/g’ {} \;
find . -type f -exec sed -i -e ’s/"\u2019"/"\u0027"/g’ {} \;

et plusieurs dérivées mais je ne trouve pas la bonne formule sur le net.

Merci

Dernière modification par bergeronnette (Le 13/02/2021, à 13:54)

Hors ligne

#2 Le 13/02/2021, à 11:52

bergeronnette

Re : [résolu] Remplacer caractère unicode en ligne de commande

Je crois que j'ai trouvé grâce à ce site https://www.gaijin.at/en/infos/unicode- … able-latin

find . -type f -exec sed -i -e 's/"’"/"'"/g' {} \;

Peut-on me confirmer que c'est la bonne formule ?

Merci

Hors ligne

#3 Le 13/02/2021, à 12:06

pingouinux

Re : [résolu] Remplacer caractère unicode en ligne de commande

Bonjour,
Pourquoi pas tout simplement ceci ?

find -type f -exec sed -i "s/’/'/g" {} \;

Hors ligne

#4 Le 13/02/2021, à 12:24

MicP

Re : [résolu] Remplacer caractère unicode en ligne de commande

Bonjour,

Pour rechercher les noms des caractères
de toutes les pages unicode et leur correspondances
(en hexa, décimal, octal, entité HTML, perl string, …)
j'utilise cette page web : UTF-8 encoding table and Unicode characters

U+01FC    Ǽ    c7 bc    LATIN CAPITAL LETTER AE WITH ACUTE
U+01FD    ǽ    c7 bd    LATIN SMALL LETTER AE WITH ACUTE

michel@debT450:~$ echo "ǼǼǼ" | sed 's/\xc7\xbc/\xc7\xbd/g'
ǽǽǽ
michel@debT450:~$

Dernière modification par MicP (Le 13/02/2021, à 12:26)

Hors ligne

#5 Le 13/02/2021, à 12:59

pingouinux

Re : [résolu] Remplacer caractère unicode en ligne de commande

Ou alors :

find -type f -exec sed -i 's/'$'\u2019''/'$'\u0027''/g' {} \;

Ajouté :
Un peu plus simple

find -type f -exec sed -i s/$'\u2019'/$'\u0027'/g {} \;

Dernière modification par pingouinux (Le 13/02/2021, à 13:09)

Hors ligne

#6 Le 13/02/2021, à 13:54

bergeronnette

Re : [résolu] Remplacer caractère unicode en ligne de commande

Bonjour,
La seconde méthode de  pingouinux fonctionne.
La mienne non.
J'ai vérifié avec le logiciel meld les 2 dossiers (original et copie) et seule celle de pingounix donne un changement.

Avec la méthode directe, j'avais une erreur caractère non reconnu.

Merci

Dernière modification par bergeronnette (Le 13/02/2021, à 14:35)

Hors ligne

#7 Le 13/02/2021, à 14:10

MicP

Re : [résolu] Remplacer caractère unicode en ligne de commande

Non, ma méthode fonctionne,

c'est simplement parce que tu as oublié de mettre des apostrophes,
comme je les avais mises dans la ligne de commande que j'ai proposée.

Fait comme ça :

En hexadécimal :

find -type f -exec sed -i 's/\xe2\x80\x99/\x27/g' {} \;

En décimal :

find -type f -exec sed -i 's/\d226\d128\d153/\d39/g'  {} \;

En échappant directement les caractères :

find -type f -exec sed -i "s/\’/\'/g"  {} \;

Un mix des deux dernières :

find -type f -exec sed -i 's/\’/\d39/g'  {} \;

Dernière modification par MicP (Le 13/02/2021, à 14:30)

Hors ligne

#8 Le 13/02/2021, à 14:34

bergeronnette

Re : [résolu] Remplacer caractère unicode en ligne de commande

MicP a écrit :

c'est simplement parce que tu as oublié de mettre des apostrophes,

Boulette…

MicP a écrit :

En échappant directement les caractères :

J'avais testé mais pas remplacé les ' qui encadrent par des ".
Merci

Dernière modification par bergeronnette (Le 13/02/2021, à 14:38)

Hors ligne

#9 Le 13/02/2021, à 14:42

MicP

Re : [résolu] Remplacer caractère unicode en ligne de commande

…J'avais testé mais pas remplacé les ' par der ".

Oui,
le piège, c'est que si on entoure d'apostrophe et que l'on met une apostrohe dedans,
sed ne sait plus où ça finit :

find -type f -exec sed -i 's/\’/\'/g'  {} \; => pas glop!

find -type f -exec sed -i "s/\’/\'/g"  {} \; => OK!

Dernière modification par MicP (Le 14/02/2021, à 17:46)

Hors ligne

#10 Le 14/02/2021, à 21:57

pingouinux

Re : [résolu] Remplacer caractère unicode en ligne de commande

@MicP #9 :
Tu peux même simplifier ta seconde commande :

find -type f -exec sed -i "s/’/'/g"  {} \;

Hors ligne

#11 Le 15/02/2021, à 01:53

MicP

Re : [résolu] Remplacer caractère unicode en ligne de commande

Ha bin oui, j'avais même pas fais attention. smile

Hors ligne