IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Problème avec la commande stat et son affichage


Sujet :

Shell et commandes GNU

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut Problème avec la commande stat et son affichage
    Bonjour à tous

    Aujourd'hui c'est moi qui ai un souci shell.

    J'ai voulu utiliser stat pour pondre un rapport sur mes FS. Ce rapport incluant des liens symboliques, j'ai demandé stat --format %N afin d'avoir le nom du fichier lié (je ne voulais pas faire de ls -l pour essayer de suivre les recommandations de N_Bah )

    Or, ce format "%N" affiche le nom de la cible mais encadré de petits caractères « et ». Et en plus, l'espace placé avant et après ce n'est pas un espace ni une tabulation.

    En regardant de plus près avec od, j'ai pu déterminer que
    • « est composé de 2 caractères de code ascii 0xab et 0xc2
    • (cet espace qui n'en est pas un) est lui aussi composé de 2 caractères de code ascii 0xa0 et 0xc2
    • » est composé de 2 caractères de code ascii 0xbb et 0xc2 (le c2 apparait à chaque fois)


    Ceci dit, rien à faire pour filtrer cet affichage au travers de sed ou autre awk. J'arrive bien à éliminer le « et » mais pour cet espace qui n'en est pas un, rien à faire. C'est pas super grave, ça ne se voit pas (et au pire, ça me donnera un argument de plus pour justifier du ls dans mes scripts ). Mais ça me titille et ça m'énerve...

    Voilà voilà - Merci à ceux qui s'intéresseront à ce souci...

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut Ode à Sed ;-)
    Salut,

    Ceci ne ferait-il pas l'affaire :

    La sortie normale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ stat --format %N test.odt 
    «test.odt»
    Le code hexa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ stat --format %N test.odt | od -xc
    0000000    abc2    6574    7473    6f2e    7464    bbc2    000a
            302 253   t   e   s   t   .   o   d   t 302 273  \n
    0000015
    Filtre sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ stat --format %N test.odt | sed 's/\xc2\xab\|\xc2\xbb//g'
    test.odt
    Le code hexa après filtrage par sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ stat --format %N test.odt | sed 's/\xc2\xab\|\xc2\xbb//g' | od -xc
    0000000    6574    7473    6f2e    7464    000a
              t   e   s   t   .   o   d   t  \n
    0000011

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    La sortie normale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ stat --format %N test.odt 
    «test.odt»
    Le code hexa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ stat --format %N test.odt | od -xc
    0000000    abc2    6574    7473    6f2e    7464    bbc2    000a
            302 253   t   e   s   t   .   o   d   t 302 273  \n
    0000015
    Incompréhensible. Chez-moi, j'ai des caractères en plus...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ stat --format %N test.odt 
    «*test.odt*»
    ... par ailleurs ici (quand je recopie mon résultat sur le forum) ils apparaissent sous forme d'une étoile mais chez-moi, sur mon écran, c'est un caractère non affichable donc représenté par un vide...

    Le code hexa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ stat --format %N test.odt |od -xc
    0000000    abc2    a0c2    6574    7473    6f2e    7464    a0c2    bbc2
            302 253 302 240   t   e   s   t   .   o   d   t 302 240 302 273
    0000020    000a
             \n
    0000021
    Citation Envoyé par zipe31 Voir le message
    Filtre sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ stat --format %N test.odt | sed 's/\xc2\xab\|\xc2\xbb//g'
    test.odt
    Le code hexa après filtrage par sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ stat --format %N test.odt | sed 's/\xc2\xab\|\xc2\xbb//g' | od -xc
    0000000    6574    7473    6f2e    7464    000a
              t   e   s   t   .   o   d   t  \n
    0000011
    Je n'avais jamais pensé à mettre directement le code hexa dans sed...

    Effectivement ceci fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ stat --format %N test.odt | sed -e "s/\xc2\xab\|\xc2\xbb//g" |od -xc
    0000000    a0c2    6574    7473    6f2e    7464    a0c2    000a
            302 240   t   e   s   t   .   o   d   t 302 240  \n
    0000015
    Et donc ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ stat --format %N test.odt | sed -e "s/\xc2\xab\|\xc2\xbb\|\xc2\xa0//g" |od -xc
    0000000    6574    7473    6f2e    7464    000a
              t   e   s   t   .   o   d   t  \n
    0000011


    Mais bon, super galère quoi !!! Tout ça parce que quelqu'un a dit "faut pas mettre de ls dans les scripts" !!!

    Info: je suis sous Debian Squeeze, mon bash est version 4.1.5, stat est version 8.5 et sed version 4.2.1

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 302
    Points : 12 798
    Points
    12 798
    Par défaut
    Bonjour,

    Pour information:
    Character
    Character name NO-BREAK SPACE
    Hex code point 00A0
    Decimal code point 160
    Hex UTF-8 bytes C2 A0
    Octal UTF-8 bytes 302 240
    UTF-8 bytes as Latin-1 characters bytes  <A0>

    http://www.ltg.ed.ac.uk/~richard/utf...+a0&mode=bytes

    En complément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo -e "\xc2\xab\xc2\xa0toto\xc2\xa0\xc2\xbb"
    «*toto*»
    $ echo -e "\xc2\xab\xc2\xa0toto\xc2\xa0\xc2\xbb" | sed -e 's/[\xc2\xa0\xab\xbb]//g'
    «toto»
    $ echo -e "\xc2\xab\xc2\xa0toto\xc2\xa0\xc2\xbb" | LANG=C sed -e 's/[\xc2\xa0\xab\xbb]//g'
    toto
    $ echo -e "\xc2\xab\xc2\xa0toto\xc2\xa0\xc2\xbb" | sed -e 's/[\xc2\xa0\xc2\xab\xc2\xbb]//g'
    toto
    Pour rappel, sed tient compte de la locale.

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Je viens de faire un test sur une wheezy (bash 4.2.37, sat 8.13 et sed 4.2.1) et j'ai effectivement des espaces autour et des astérisques (en les copiant/collant ici, pas dans le terminal) ;-\

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jp@debian7:~$ stat --format %N toto 
    «*toto*»
     
    jp@debian7:~$ stat --format %N toto | od -xc
    0000000    abc2    a0c2    6f74    6f74    a0c2    bbc2    000a
            302 253 302 240   t   o   t   o 302 240 302 273  \n
    0000015
    Par contre le sed marche de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jp@debian7:~$ stat --format %N toto | sed 's/\xc2\xab\xc2\xa0\|\xc2\xa0\xc2\xbb//g'
    toto
     
    jp@debian7:~$ stat --format %N toto | sed 's/\xc2\xab\xc2\xa0\|\xc2\xa0\xc2\xbb//g' |od -xc
    0000000    6f74    6f74    000a
              t   o   t   o  \n
    0000005

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    joli l'hexa dans sed j'yaurai pas pensé ...

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 462
    Points
    19 462
    Par défaut
    Bonjour,

    je salue l'effort,
    avec une réserve : on ne sait pas exactement comment tu élabores ton rapport,
    parce que «afin d'avoir le nom du fichier lié», moi, j'utilise readlink (i.e. l'outil ad'hoc) !

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    parce que «afin d'avoir le nom du fichier lié», moi, j'utilise readlink (i.e. l'outil ad'hoc) !
    Pourquoi je passe toujours à coté des choses les plus simples ???

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb avec mon site web et son affichage
    Par cyberdevelopment dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 10/08/2006, 16h03
  2. Problème avec la commande nice
    Par ShadoX dans le forum Administration système
    Réponses: 2
    Dernier message: 08/08/2006, 18h59
  3. Problème avec la commande revoke sous oracle
    Par merlubreizh dans le forum Oracle
    Réponses: 19
    Dernier message: 28/04/2006, 15h02
  4. Réponses: 6
    Dernier message: 18/04/2006, 17h46
  5. [C++] Problème avec la commande "make"
    Par quantik-revolution dans le forum Systèmes de compilation
    Réponses: 6
    Dernier message: 02/04/2006, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo