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



## bozo38 (20 Novembre 2010)

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 ?


----------



## ntx (20 Novembre 2010)

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.


----------



## mtcubix (20 Novembre 2010)

essaie tr au lieu de sed pour voir 

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


----------



## bozo38 (20 Novembre 2010)

mtcubix a dit:


> 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 ----------




ntx a dit:


> 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.


----------



## mtcubix (20 Novembre 2010)

ou alors ton fichier *monfichier.db qui est fautif ??

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


----------



## bozo38 (20 Novembre 2010)

mtcubix a dit:


> 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 ?


----------



## mtcubix (20 Novembre 2010)

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


----------



## bozo38 (20 Novembre 2010)

mtcubix a dit:


> 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:
> 
> ...



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


----------



## mtcubix (20 Novembre 2010)

une solution consiste à le faire dans le .profile
 doc ksh compatible bash


----------



## bozo38 (20 Novembre 2010)

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


----------

