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 :

[Shell] Suppression d'espace en début et fin de colonne [Débutant(e)]


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Par défaut [Shell] Suppression d'espace en début et fin de colonne
    Bonjour tout le monde!

    j'ai un petit soucis concernant ce petit script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    #!/bin/sh
    ligne='toto         ;titi ; tata ; michael    '
    lng=`echo $1 | awk '{ print length($0); }'`
    prefixe=`echo $ligne | tr -s ' ' | cut -c3-$lng`
    echo $prefixe
    j'ai comme résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to ;titi ; tata ; michael
    alors que je voudrais avoir plutôt ça :
    sans les espaces.

    Si quelqu'un a une suggestion je suis toute ouïe !
    Merci

  2. #2
    Expert confirmé

    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
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ ligne='toto         ;titi ; tata ; michael    '
     
    $ echo ${ligne// /}
    toto;titi;tata;michael

  3. #3
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Par défaut
    Merci !

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut
    Bonsoir,
    Ci-dessous une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne='toto         ;titi ; tata ; michael    '
    echo $ligne|tr -d ' '

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Bonjour,

    J'ai le même problème, mais malheureusement les deux solutions ne répondent que partiellement au pb :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ligne='toto         ; SOCIETE GENERALE ; tata ; michael    '
     
    $ echo ${ligne// /}
    toto;SOCIETEGENERALE;tata;michael :
     
    alors que le résultat attendu est:
     
    toto;SOCIETE GENERALE;tata;michael
    Les commandes proposées suppriment tous les espaces et pas seulement ceux de début et de fin de chaque colonne.

    des idées ??!!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour,

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ shopt -s extglob
    $ ligne='toto ; SOCIETE GENERALE ; tata ; michael '
    $ echo "${ligne//+( );+( )/;}"
    toto;SOCIETE GENERALE;tata;michael
    voir Développement des noms de fichiers
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Je m'en voudrais beaucoup de passer pour un chipoteur...

    mais ça ne supprime pas les espaces en début ou fin de ligne, ni les espaces après un ';' non précédé d'une espace, ni les espaces précédés de '; ;', ainsi qu'en atteste le test suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ligne=' toto ; ; SOCIETE GENERALE ; tata; michael '
    $ echo "'${ligne//+( );+( )/;}'"
    ' toto;; SOCIETE GENERALE;tata; michael '
    Allez! Un petit coup de sed:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "'$(echo "${ligne}" | sed -e 's| *; *|;|g' -e 's|^ *||' -e 's| *$||')'"
    'toto;;SOCIETE GENERALE;tata;michael'

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    ouaip, j'ai vu un peu juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *(liste-motif)
                         Correspond à zéro ou plusieurs occurrences des motifs indiqués.
    restent les espaces en début et en fin de chaîne.
    deux petits remplacements de paramètres (# et %) et hop !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    C'est bien ce qu'il me semblait me rappeler...
    sauf que chez moi, ça marche pô
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ ligne=' toto ; ; SOCIETE GENERALE ; tata; michael '
     
    $ echo "'${ligne//*( );*( )/;}'"
    ' toto ; ; SOCIETE GENERALE ; tata; michael '
     
    $ echo $BASH_VERSION
    3.2.48(1)-release
     
    $ uname -a
    Darwin imacjack.home 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386

  10. #10
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Je propose une solution que je n'ai pas vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ligne=' toto ; ; SOCIETE GENERALE ; tata; michael '
    $ sed 's/ *; */;/g' <<<$ligne
    toto;;SOCIETE GENERALE;tata;michael

  11. #11
    Expert confirmé

    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
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Je propose une solution que je n'ai pas vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ligne=' toto ; ; SOCIETE GENERALE ; tata; michael '
    $ sed 's/ *; */;/g' <<<$ligne
    toto;;SOCIETE GENERALE;tata;michael
    Si si, jack-ft l'a donnée, mais elle est noyée dans la masse

  12. #12
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Bonjour,

    Et la version awk alors ?


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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Citation Envoyé par jack-ft
    sauf que chez moi, ça marche pô
    l'option extglob est bien activée par shopt ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Oui, oui!
    J'ai bien suivi ton code!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ shopt extglob
    extglob        	on
     
    $ echo "'${ligne//*( );*( )/;}'"
    ' toto ; ; SOCIETE GENERALE ; tata; michael '

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    je pensais cette option plus ancienne, mais non, elle n'est disponible que depuis bash-4.1.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #16
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Merci pour vos réponses.

    Voici le code qui a marché pour moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne=' toto ; ; SOCIETE GENERALE ; tata; michael '
    echo $ligne|sed 's/ *; */;/g'

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

Discussions similaires

  1. Effacer les espaces de début et fin d'un textarea
    Par wiwizz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 16/11/2011, 14h16
  2. comment supprimer des espaces en début et fin de chaine
    Par thor76160 dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 10h08
  3. Supprimer les espaces en début et fin sur un ensemble de champs
    Par Olivier Regnier dans le forum Langage
    Réponses: 7
    Dernier message: 14/11/2007, 20h06
  4. Réponses: 5
    Dernier message: 18/10/2006, 09h01
  5. Regexp de suppression d'espaces en début de ligne
    Par batmatm dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2005, 15h25

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