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 :

Commande Sed Shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suède

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2011
    Messages : 67
    Par défaut Commande Sed Shell
    Bonsoir,

    Pourriez vous me dire ce que font ces deux commandes svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/;$/`echo \\\r`/" Fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$(printf '%010s' `expr $(cat FICHIER | wc -l) + 1`)"\\\r
    C'est surtout les slashs dans \\\r qui me gènent ...

    Autre question : J'ai un fichier de plusieurs enregistrements avec des champs qui peuvent être vides :

    XXX;LOCAL; ; ; ; ; ; ; ; ; ; ; ; ;3333;

    Comment je peux enlever les espaces entre les points virgules par un shell svp ?

    Merci pour votre aide

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour,

    • Pour la commande sed
      On remplace le point virgule de fin de ligne par le résultat de la commande suivante:
      Le \r doit être ajouté pour avoir la fin de ligne \r\n des fichiers sous windows.
      M'enfin, ça n'explique pas pourquoi le ';' disparaît; ni pourquoi il est utilisé cette méthode maladroite pour obtenir un \r
    • Pour la commande echo
      On affiche sur 10 caractères la taille d'un fichier augmenté de 1 toujours avec le \r.
      Encore une fois: quelle maladresse! Le cat ne sert à rien. Pourquoi expr? Pourquoi incrémenter le nombre de lignes?


    En ce qui concerne le \\\r, j'imagine qu'il y a une double interprétation. Donc \\\r donne \r qui donne un retour chariot.

    En ce qui concerne les espaces dans le jeu de données, je déconseille de les enlever car s'ils sont là, ce n'est pas pour rien.
    Sinon, la méthode est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed ':z;s/; ;/;;/;tz' fichier

  3. #3
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut g : global substitute
    Bonjour,
    Je pense que la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed ':z;s/; ;/;;/;tz' fichier
    peut être simplifiée comme suit :
    dans la mesure où un ; suivi d'un blanc correspond sans doute à un champ vide.
    Au pire, On aura ôté le 1er blanc d'un champ valorisé
    Ça ne retire rien à la subtilité de Flodelarab

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Citation Envoyé par rosyfulla
    bonjour Florian,

    Concernant mon post sur les SED SHELL , on a ajouté expr et +1 pour compter l'entete et le pied de page qui doivent etre ajouté ( je pense )

    As tu une meilleure idée pour ajouter le nombre de ligne à l'entete ?

    parceque j'ai 3 fichiers , le premier jy stocke l'entete , le deuxième , les données et le 3 eme le pied , après je concatène le tout . mon client veut absolument avoir le nombre de lignes dans le fichier à la fin de la concaténation ...


    Donc à mon avis ça explique l'ajout de +1 . qu'est ce que t'en penses ?


    Merci de ton aide
    1. Il faut arrêter de m'envoyer des messages privés (MP) car je ne réponds pas aux MP.
    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      cat entete donnees pied >resultat
      nb_lignes=$(wc -l resultat)
      nb_lignes=$(( nb_lignes + 1 ))
      echo $nb_lignes >> resultat
      sed 's/\r*$/\r/' resultat >resultat_windows
    3. Mélanger les données et les méta-données (comme le nombre de lignes) est une mauvaise idée. Il faut l'expliquer à ton client.

Discussions similaires

  1. probleme avec du shell et la commande sed
    Par cobra85 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 10/04/2009, 16h31
  2. commandes sed via un shell
    Par prentyss dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 07/05/2008, 15h22
  3. c shell + commande sed
    Par gaucher dans le forum Linux
    Réponses: 3
    Dernier message: 15/11/2007, 12h42
  4. c shell + commande sed
    Par gaucher dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 14/11/2007, 13h19
  5. La commande sed ne prend pas ma variable du shell
    Par Michaël dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 03/10/2006, 19h11

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