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 :

Problème avec utilitaire sed


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut Problème avec utilitaire sed
    Bonjour à vous tous. J'ai en ce moment un script en bash à faire mais j'ai depuis quelques temps quelques problèmes. J'ai besoin de faire une recherche dans un fichier carnet créé plutot. Ensuite, je doit remplacer l'ancienne adresse email par la nouvelle mais sa marche pas et je ne comprend pas pourquoi. Pour vous situer, ce script sert à regrouper les différentes adresses emails dans un fichier créé appellé Car.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #! /bin/sh
    #! /bin/awk
    ModificationEmail() {
    echo "Veuillez entrer l'adresse email que vous désiré changer"
    read $email
     
    echo "Veuillez entrer la nouvelle adresse email désiré"
    read $nouvelleemail
     
    sed 's/"$email"/"$nouvelleemail"/' > car
    }
     
    opt1="Statistique de la taille du carnet"
    opt2="Afficher le carnet d'adresse"
    opt3="Imprimer le carnet"
    opt4="Ajouter un nouveau membre"
    opt5="Modifier un membre"
    opt6="Rechercher un membre"
    opt7="Information du nombre de membre avec un fournisseur"
    opt8="Quitter"
     
    echo -e "\nBIENVENUE DANS LE GESTIONNAIRE D'ADRESSES EMAILS\n"
     
    echo -e "Menu: \n"
    PS3="
    Entrez votre choix : "
    while (true)
    do
     select option in "$opt1" "$opt2" "$opt3" "$opt4" "$opt5" "$opt6" "$opt7" "$opt8"
      do
       case $option in
            $opt1) echo "Vous avez choisi l'option : $opt1"
                    echo -e "\n"
                    break ;;
            $opt2) AfficherCarnet 
                    echo -e "\n"
                    break ;;
            $opt3) ImprimerCarnet
                    echo -e "\n"
      		break ;;
            $opt4) AjouterMembres $nom $prenom $email 
    		echo $nom $prenom $email $(date +%D) >> car
                    echo -e "\n"
                    break ;;
            $opt5) ModificationEmail
                    echo -e "\n"
                    break ;;
            $opt6) echo "Vous avez choisi l'option : $opt6"
                    echo -e "\n"
                    break ;;
            $opt7) FournisseurInternet $fda
    		echo "Il y a 23 usagés utilisant le fournisseur d'accès internet nommé $fda."
                    break ;;
    	$opt8) echo "Vous avez quitter le programme!!"
    		exit ;;
            *) echo "Option inexistante";
                    exit ;;
       esac
      done
    done

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    J'arrive pas trop à comprendre ce "/bin/awk" en début de script. Soit tu écris un script shell avec des ordre shell, soit tu écris un script shell qui va lancer la commande "awk" avec tout le code du "awk" derrière. Mais tu mélanges pas les 2

    Ensuite ton "sed" va écrire la modif dans le fichier "car" ok. Mais où sont les data qu'il doit transformer ? Si tu lui mets rien ben il ira lire l'entrée standard (le clavier).

    Sinon pas de parenthèses à "true". Tu testes la commande "true" dans ce shell-ci, pas dans un sous-shell...

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Ok donc si j'ai bien compris alors la déclaration !/bin/awk en début de script sert à rien. Car mon script va ce lancer à partir d'un terminal et le awk c'est juste pour effectuer des recherches dans mon fichier "car". Mais pour la commande sed, mon but est de remplacer une adresse email par un nouvelle adresse email.

    Exemple: un usagé veut changer qwas@dfdfs.com par qwwed@dfsdfs.com.

    Donc je demande à l'utilisateur son ancien email et je le lit dans une variable "email" ensuite je demande son nouveau email et je le lit dans une variable "nouvelleemail." Donc si je comprend bien avec le sed, je peu pas passer des variables pour qu'il le change dans le fichier "car"?

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par carlou135 Voir le message
    Ok donc si j'ai bien compris alors la déclaration !/bin/awk en début de script sert à rien. Car mon script va ce lancer à partir d'un terminal et le awk c'est juste pour effectuer des recherches dans mon fichier "car". Mais pour la commande sed, mon but est de remplacer une adresse email par un nouvelle adresse email.
    La déclaration "!/bin/sh" sert à indiquer au système que ce script devra être interprété par le programme "/bin/sh". La seconde déclaration est inutile voire polluante...

    Citation Envoyé par carlou135 Voir le message
    Exemple: un usagé veut changer qwas@dfdfs.com par qwwed@dfsdfs.com.
    Si le texte se trouve dans une variable "$var"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $var |sed -e "s/qwas@dfdfs.com/qwwed@dfsdfs.com/g"
    Citation Envoyé par carlou135 Voir le message
    Donc je demande à l'utilisateur son ancien email et je le lit dans une variable "email" ensuite je demande son nouveau email et je le lit dans une variable "nouvelleemail." Donc si je comprend bien avec le sed, je peu pas passer des variables pour qu'il le change dans le fichier "car"?
    Ben si !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -e "s/$email/$nouvelleemail/g" car >/tmp/car$$
    mv /tmp/car$$ car

  5. #5
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -e "s/$email/$nouvelleemail/g" car >/tmp/car$$
    mv /tmp/car$$ car
    Donc si on interprète cette solution. Sa va chercher "$email" et le remplacer par "$nouvelleemail". Ensuite sa l'enregistre dans un fichier "car" temporaire et ensuite tu move le fichier temporaire dans le fichier original "car". Mais j'aimerais savoir à quoi sa sert le g apres "$nouvelleemail" et les $$ à la fin de car.

  6. #6
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Citation Envoyé par carlou135 Voir le message
    Donc si on interprète cette solution. Sa va chercher "$email" et le remplacer par "$nouvelleemail". Ensuite sa l'enregistre dans un fichier "car" temporaire et ensuite tu move le fichier temporaire dans le fichier original "car". Mais j'aimerais savoir à quoi sa sert le g apres "$nouvelleemail" et les $$ à la fin de car.
    Non, cela creer un fichier "tmp/car" ou toutes (d'ou le g) les occurences de email sont remplacee par nouvelleemail dans le fichier "car".
    Sinon, man sed, ca marche bien aussi. Tout comme exalead, ou google.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Anthony.Desvernois Voir le message
    Non, cela creer un fichier "tmp/car"...
    Presque...

    Citation Envoyé par carlou135 Voir le message
    Donc si on interprète cette solution. Sa va chercher "$email" et le remplacer par "$nouvelleemail". Ensuite sa l'enregistre dans un fichier "car" temporaire et ensuite tu move le fichier temporaire dans le fichier original "car". Mais j'aimerais savoir à quoi sa sert le g apres "$nouvelleemail" et les $$ à la fin de car.
    Le "g" indique un remplacement "global" par ligne. C.a.d. que si une ligne contient 3 mots à remplacer, les 3 mots seront remplacés. Sinon un seul l'est

    $$ est une variable qui contient le n° de processus en cours. Permet d'avoir un nom unique à ton fichier temporaire (sinon que se passe-t-il si tu lances plusieurs fois ton script en parallèle ???)

    Perso je vais encore plus loin. Tous mes fichiers temporaires possèdent comme racine le nom du script. Cela permet ainsi d'identifier la provenance d'un fichier temporaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom="/tmp/`basename $0 .sh`_tmp$$"

  8. #8
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Presque...
    Oups ^^ pas fait gaffe au $$

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut bonjour
    J'ai juste lu le début.
    Tes read me semble byzarre :

    read $nouvelleadresse
    ne marche pas, il faut mettre

    read nouvelleadresse
    sans le $
    Pour le sed il faut passer par un fichier temporaire tu ne peux pas modifier un fichier et rediriger dans le même..

  10. #10
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    perl -pi -e est une bonne alternative a sed
    Effectivement les read sont incorrectes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pi -e 'commande sed' fichier(s)

  11. #11
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup à vous pour votre aide. Je vais tester cela le plus rapidement possible et je vous en reparle. Pour mes reads je savait qu'il y avait quelque chose qui marchait pas mais je ne savait pas c'était quoi. Le $ indique le contenu de la variable?

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par carlou135 Voir le message
    Le $ indique le contenu de la variable?
    Exact

  13. #13
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Merci à vous tous sa marche numéro un. Mais j'aurais une autre question pour vous. J'aimerais en même temps que l'utilisateur change son adresse email que la date d'inscription soit changer aussi. Est ce que sa peu se fait en restant dans le même sed que pour changer l'email?

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par carlou135 Voir le message
    Merci à vous tous sa marche numéro un. Mais j'aurais une autre question pour vous. J'aimerais en même temps que l'utilisateur change son adresse email que la date d'inscription soit changer aussi. Est ce que sa peu se fait en restant dans le même sed que pour changer l'email?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/chaine1/chaine2/g" -e "s/chaine3/chaine4/g" -e "s/chaine5/chaine6/g" -e ... -e ... -e ... fic1 >fic2

Discussions similaires

  1. Problème avec le sed
    Par azahiri dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 22/12/2012, 13h31
  2. Problème avec sed
    Par Zlika_ese dans le forum Linux
    Réponses: 1
    Dernier message: 26/05/2007, 21h39
  3. [utilitaire bcp]problème avec retour à la ligne
    Par m-mas dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/05/2007, 15h10
  4. Problème avec la commande sed
    Par JUSTIN Loïc dans le forum Linux
    Réponses: 2
    Dernier message: 05/09/2006, 10h17
  5. problème avec l'utilitaire isql ...
    Par vbcasimir dans le forum Administration
    Réponses: 2
    Dernier message: 05/01/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