Terminal et cat : resultat différent si interactif ou script

bozo38

Membre enregistré
17 Décembre 2004
7
0
salut à tous,

j'ai un fichier qui vient d'une base de donnée, je l'ouvre avec cat, j'extrait le texte avec strings) en nettoyant les accents avec sed.

j'utilise :
cat monfichier.db | sed 'y/àéèêîôùç/aeeeiouc/' | strings

et en interactif ça marche nickel.

Alors je colle ça dans un script :

#!/bin/bash
cat monfichier.db | sed 'y/àéèêîôùç/aeeeiouc/' | strings


et là j'ai juste une erreur :
sed: Illegal byte sequence

C'est tres énervant !!! une idée ?
 
Je dirais que le shell de ton terminal et celui ouvert par ton script n'utilise pas le même encodage pour les caractères accentués.
 
essaie tr au lieu de sed pour voir

tr 'àéèêîôùç' 'aeeeiouc' à la place de sed 'y/àéèêîôùç/aeeeiouc/'
 
essaie tr au lieu de sed pour voir

tr 'àéèêîôùç' 'aeeeiouc' à la place de sed 'y/àéèêîôùç/aeeeiouc/'

salut,

meme punition avec tr :
tr: Illegal byte sequence


est ce que cat traiterait différement mon fichier.db dans le shell du script et dans le shell interactif ?

---------- Nouveau message ajouté à 12h38 ---------- Le message précédent a été envoyé à 12h33 ----------

Je dirais que le shell de ton terminal et celui ouvert par ton script n'utilise pas le même encodage pour les caractères accentués.

salut,

j'y avais bien pensé mais je ne sais pas ou ca se regle.
si je fais echo $LANG dans le terminal j'ai :
fr_FR.UTF-8

et même chose dans le script.
 
ou alors ton fichier monfichier.db qui est fautif ??

essaie avec un fichier texte dont le contenu n'est pas trop compliqué
 
ou alors ton fichier monfichier.db qui est fautif ??

essaie avec un fichier texte dont le contenu n'est pas trop compliqué

hello,

le fichier.db je le récupère comme ça, il est extrait d'un telephone portable... Mon souci est justement de le nettoyer avant d'en faire quelque chose.

J'ai suivi ton conseil et j'ai essayé avec un fichier tout simple (trois lignes, quelques accents).
J'ai le même résultat : ca marche en interactif, pas en script. J'ai aussi vérifié que je ne foirais pas le path dans le script : cat ouvre bien le fichier.

bizarre, non ?
 
ca marche en terminal ok, il faut chercher du côté shell comme l'a noté ntx.

essaie de changer de de shell pour le script:

en-têtes
!# /bin/bash pour le bash
!# /bin/sh pour le sh
 
ca marche en terminal ok, il faut chercher du côté shell comme l'a noté ntx.

essaie de changer de de shell pour le script:

en-têtes
!# /bin/bash pour le bash
!# /bin/sh pour le sh

hello,

alors très bizarrement, ça marche déjà mieux si j'utilise le sed de macports (gsed) plutot que le sed de osx. En tout cas je n'ai plus d'erreur "illegal byte error" et sur mon fichier de test simple ça fonctionne tout à fait.

mais j'ai quand même un souci d'encodage entre le shell interactif et le shell du script, le cat ne sort pas les accents sous la même forme de mon fichier.db (dont je ne maitrise pas l'encodage pour le coup)

comment je fais pour changer l'encodage du shell ?

merci,
Fab
 
Ca y es j'ai trouvé.
j'utilise subethaedit pour taper le script et son encodage par defaut n'était en western-macos - alors qu'ensuite bash l'interpretait bien en utf8 - donc le sed ne marchait pas car 'y/àéèêîôùç/aeeeiouc/' devenait du garbage.

merci pour tous les conseils, ça m'a bien fait avancé !
Fab