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

Linux Discussion :

[SHELL] utilisation de sed


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Points : 19
    Points
    19
    Par défaut [SHELL] utilisation de sed
    Bonjour à tous,

    Je souhaite migrer le contenu d'un fichier vers un autre. Chaque ligne du premier fichier doit etre modifiée, pour cela j'utilise un sed mais je suis confronté à une difficulté.
    les lignes du premier fichier sont de la forme suivante:

    prenom/mail/autre1/domaine1/prenom

    et je dois obtenir
    prenom/mail/autre2/domaine2/prenom

    En sachant que domaine2 est domaine1 avec les tirets remplacé par des points. Le probléme etant que des prenoms comportent des tiret qui doivent rester.

    Mon sed fonctionne corectement mais je ne sais pas comment spécifier que les tirets ne doivent etre remplacés par des points uniquement dans domaine2.

    Merci de votre aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 38
    Points : 44
    Points
    44
    Par défaut pourquoi sed
    Je ne suis certain que sed soit le bon outil por résoudre ce genre de problème.

    Voici un petit script perl à mettre dans un fichier, faire un chmod +x, et le lancer el passant en paramètre le nom du fichier à convertir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #! /usr/bin/perl -wnl
    @fields = split /\//;
    $fields[3] =~ s/-/./g;
    print join "/",@fields

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Merci de ton aide,
    Cependant je ne connais pas le perl et je dois absolument écrire le script en Shell.

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Finalement j'y arrive avec plusieurs lignes de scripts en découpant la ligne d'origine en plusieures variables que je réassemble aprés traitement.
    Mais si quelqu'un a une solution plus propre je suis preneur.

  5. #5
    Membre éclairé 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
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par Tom Quinn
    Mais si quelqu'un a une solution plus propre je suis preneur.
    awk peut faire l'affaire

    http://lea-linux.org/cached/index/Dev-awk.html#


    Version compacte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk 'BEGIN{FS="/";OFS="/"}{gsub(/\./,"-",$4);print}' tst.txt

    Version plus lisible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    awk '
    BEGIN {
        FS="/"
        OFS="/"
    }
    {
        gsub(/\./,"-",$4)
        print
    }' tst.txt

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Merci BlaireauOne,
    je vais regarder ta solution même si je ne maitrise pas awk mais ce sera une bonne occasion de m'y mettre (depuis le temps que l'on m'en parle ...).

Discussions similaires

  1. Utilisation de sed avec les variables dans un Shell
    Par mbole dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 05/07/2007, 17h46
  2. Utilisation de sed
    Par p1erstef dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 03/05/2007, 12h15
  3. Utilisation de SED
    Par crazykangourou dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 08/12/2006, 17h26
  4. Utilisation de sed
    Par mauzillon dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/09/2006, 10h46
  5. Utilisation de sed
    Par paco69 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/07/2006, 16h13

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