logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 31-01-2022 12:24:29

Anonyme
Invité

Enlever le ? collé derrière certain mots pour le remplacer par un '

Bonjour,

Dans mes fichiers toc parfois ce trouve des mots qui devrait avoir un '
Mais voilà cdrdao me "remplace" ceux-ci par un ?
Example :

Devrait-être :

Bringin' On The Heartbreak



Mais voilà, je me retrouve avec ça :

Bringin? On The Heartbreak



C'est pas beau et il faut que je retouche le fichier à la mano pour relancer mon script. C'est vraiment pas pratique et mettre un otion pour éditer le fichier ( c'est faisable ) mais je préfèrerai un truc plus radical.

Donc il me faudrait un sed ou autre pour remplacer le ? par un ' mais seulement pour les ? accollés derrière chaque mot. Si espace, ne pas le faire.

Merci pour l'aide.

Dernière modification par Anonyme (31-01-2022 12:25:17)

#2 31-01-2022 14:15:19

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

sed -r "s#([^ ])\?#\1'#"


[^ ] : n'importe quel caractère sauf un espace
\? : sinon "?" a un autre sens, donc je le force en "le caractère '?'" par un antislash
(XX) : chaine du caractère que je vais ramener avec \1 ensuite

Je sais pas si je suis compréhensible x)

Dernière modification par otyugh (31-01-2022 14:16:54)


virtue_signaling.pngpalestine.png

En ligne

#3 31-01-2022 14:22:04

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

otyugh a écrit :

Je sais pas si je suis compréhensible x)


perso j'ai pas tout compris
mais bon c'est pas facile les sed , awk et autre truc du genre

Mais a la base c'est pas un soucis d'encodage des caractères?
peut être une variable d'environnement à changer pendant l'opération avec cdrdao?
LANG=fr_FR.UTF-8
GDM_LANG=fr_FR.utf8


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#4 31-01-2022 14:45:39

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

Hello,

Je vais tenter une autre explication de la commande de otyugh :
Remplace la 1ère chaîne de 2 caractères se terminant par ? sauf la chaîne 'espace'? , par le 1er caractère de la chaîne suivi du caractère '.

Donc si j'ai "Bringin? the solution or not ?", sed va trouver la chaîne "n?" et la remplacer par "n'". Mais ne touchera pas à la chaîne " ?".

Plus en détail :
   - s : commande de substitution de sed.
   - # : caractère de construction de la commande de substitution de sed : s#chaine_recherchée#chaine_de_remplacement#
   - [^ ] : tout caractère sauf 'espace'
   - \? : le caractère ?
Donc la chaîne recherchée est [^ ]\? qui correspond à toutes le chaines de 2 caractères se terminant par ? sauf "espace?".
   - ([^ ])\? : mise en mémoire du 1er caractère la chaîne recherchée.
   - \1 : rappel de la 1ere mise en mémoire de chaine.
   - ' : le caractère '

Donc cette commande se traduit par :
Cherche le 1er caractère suivi d'un ?, sauf 'espace' et remplace le tout par le caractère trouvé suivi du caractère '.

Pour avoir un effet global (remplacer tous les x? par x'), il faut ajouter g à la fin de la commande s de sed :

sed -r "s#([^ ]\?#\1'#g"



Finalement, je crois que je suis encore moins clair tongue
lol

Dernière modification par Tawal (31-01-2022 14:54:39)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#5 31-01-2022 14:47:09

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

Si si, c'est mieux x)
Le détail c'est assui l'option "-r" de sed, qui change certains trucs... Mais perso je l'utilise par flemme. Quand on utilise pas "-r" on est obligé d'échapper ses parenthèses pour faire des groupes \(XXX\) et j'ai été traumatisé, donc depuis dès que je fais des groupes j'ajoute "-r" pour ne pas à avoir à le faire lol

Dernière modification par otyugh (31-01-2022 14:49:08)


virtue_signaling.pngpalestine.png

En ligne

#6 31-01-2022 14:56:06

Anonyme
Invité

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

Croutons a écrit :

...

Mais a la base c'est pas un soucis d'encodage des caractères?
peut être une variable d'environnement à changer pendant l'opération avec cdrdao?
LANG=fr_FR.UTF-8
GDM_LANG=fr_FR.utf8



Peut-être mais le plus bizarre, c'est que cdrdao ne fait pas ça sur tout les CD hmm

#7 31-01-2022 15:00:06

Anonyme
Invité

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

Tawal a écrit :

...

Finalement, je crois que je suis encore moins clair tongue
lol



J'en sais rien, je me suis barré avant la fin de ton explication  lol lol lol

#8 31-01-2022 16:51:50

Anonyme
Invité

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

Je suis obligé d'abandonner cette astuce car sur un CD, j'ai un bon "nommage" :

06 - David & Johnathan - Est-Ce Que Tu Viens Pour Les Vacances?.flac



bien que moi j'aurai écrit le ? avec espace dans le titre :

06 - David & Johnathan - Est-Ce Que Tu Viens Pour Les Vacances ?.flac



Donc je contourne ce problème avec cette méthode dans un script :


read -t 10 -p "Voulez-vous vérifier le fichier TOC ? [Y/n] ou attendre 10 secondes." input
echo ""
case $input in
    [yY][eE][sS]|[yY])

    nano -w "$ALBUMNAME/$ALBUMNAME.toc" < /dev/tty

echo -e "\e[3;94mLe fichier $ALBUMNAME.toc a été vérifié et éventuellement corrigé.\033[m"
echo -e "\e[3;94mOn continue ...\033[m"
sleep 2
echo ""
 ;;
    [nN][oO]|[nN])
    echo -e "Non, on continue."
sleep 2
echo ""
 ;;
esac
 



Merci à vous pour l'aide. Pour moi c'est résolu wink

Dernière modification par Anonyme (31-01-2022 16:52:52)

#9 31-01-2022 17:00:02

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

hum… le point d'interrogation ne remplacerait-il pas un caractère mal codé pour de l'utf8 ?
Un caractère codé en latin1 par exemple…

Hors ligne

#10 31-01-2022 17:34:50

Anonyme
Invité

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

Bonjour enicar

peut-être mais comment le vérifier ?
Ce serait sur le CD Audio ?

Dernière modification par Anonyme (31-01-2022 17:35:31)

#11 31-01-2022 17:42:24

ubub
Membre
Distrib. : Debian
(G)UI : xfce
Inscription : 14-05-2019

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

Le détail c'est assui l'option "-r" de sed, qui change certains trucs


 -r, --regexp-extended
    Utiliser les expressions rationnelles dans le script.


http://manpagesfr.free.fr/man/man1/sed.1.html

En ligne

#12 31-01-2022 17:48:30

Anonyme
Invité

Re : Enlever le ? collé derrière certain mots pour le remplacer par un '

@enicar

j'ai de fichiers toc comme celui à problème :

Def Leppard - Vault: Greatest Hits 1980-1995.toc: ASCII text



EDIT (file -i)  Def Leppard - Vault: Greatest Hits 1980-1995.toc: text/plain; charset=us-asci

et d'autres qui vont bien comme :

Ange - Moyen-âge.toc: Unicode text, UTF-8 text



J'utilise dans mon script déjà une option pour les accents de ce style qui fonctionne :

iconv --from-code=ISO-8859-1 --to-code=UTF-8



mais après, je ne peux pas en dire plus.

Dernière modification par Anonyme (31-01-2022 17:53:01)

Pied de page des forums