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 :

Utilisateur de SED pour faire un "rechercher/remplacer"


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut Utilisateur de SED pour faire un "rechercher/remplacer"
    Bonjour,

    J'ai un fichier qui gère les mots de passe des utilisateurs (/etc/shadow)

    Je souhaite modifier le mot de passe d'un utilisateur donné, via "SED" (afin de l'implémenter dans un script bash)

    J'ai deux types de fichier "shadow" :

    Le 1er :

    user1:motdepassecrypté1:655196:0:99999:7::
    user2:motdepassecrypté2:655656:0:99999:7:::
    user3:motdepassecrypté3:655765:0:99999:7:::
    user4:motdepassecrypté4:655999:0:99999:7::::
    2eme fichier :

    user1:
    password = motdepassecrypter1
    lastupdate = 1234133
    flags =

    user2:
    password = motdepassecrypter2
    lastupdate = 1234333
    flags =

    user3:
    password = motdepassecrypter3
    lastupdate = 1234633
    flags =

    user4:
    password = motdepassecrypter4
    lastupdate = 1234933
    flags =
    Comment faire ? Utiliser une regex ?

    Merci d'avance pour votre aide.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    bonjour,

    sed ne sait pas faire des choses différentes sur plusieurs fichiers.
    c'est plutôt un boulot pour awk :
    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    si la ligne commence par le nom du user
       passer à la ligne suivante
       extraire la partie pertinente dans une variable
       passer au fichier suivant
       si la ligne commence par le nom du user
          remplacer la partie pertinente par la variable
          sortir
       finsi
    finsi
    un peu d'aide pour awk
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Je me suis mal expliqué.

    J'essaie de réaliser une commande avec SED pour modifier le 1er fichier et ensuite, une seconde commande avec SED pour modifier le 2eme fichier, soit deux lignes de commandes.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    user=user2
    newPwd=newEncryptPwd
    sed '/^'"$user"'/s/\([^:]*\):[^:]*:\(.*\)/\1:'"$newPwd"':\2/' 1erFichier
    sed '/^'"$user"'/{N; s/\(.* = \).*/\1'"$newPwd"'/}' 2emeFichier
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    merci bcp ! J'étais loin de trouver ceci !

    Ceci fonctionne parfaitement !

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    user=user2
    newPwd=newEncryptPwd
    sed '/^'"$user"'/{N; s/\(.* = \).*/\1'"$newPwd"'/}' 2emeFichier
    Je reviens sur le sujet :

    Cette commande fonctionne bien sur Redhat, mais sur Solaris 5.8, j'ai une erreur :

    sed: command garbled: /^essai/{N; s/\(.* = \).*/\1toto/}
    Comment faire ?

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    user=user2
    newPwd=newEncryptPwd
     
    sed '/^'"$user"'/{N; s/\(.* = \).*/\1'"$newPwd"'/}' 2emeFichier
    merci N_BaH pour ton code, j'ai une question, quel est le rôle des accolades dans ton 2eme code.
    j'ai essayé sans les accolades pour tester, et là j'ai vu que tous les USER'S ont changé de mot de passe,

    merci beaucoup

  8. #8
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    oui le code fonctionne très bien. Mais sur des système un peu vieux, la regex n'est pas comprise du système.

    il n'y a pas moyen de faire quelque chose de plus primitive ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    Citation Envoyé par saw-next
    quel est le rôle des accolades dans ton 2eme code.
    les accolades groupent les commandes à appliquer pour la condition énoncée entre /.../. Sans les accolades, seule la première commande ne s'applique qu'à la condition, les commandes suivantes s'appliqueront à toutes les lignes.

    Arnaud : regarde, en ajoutant un `;' avant l'accolade fermante
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. [WD-2007] Pour les adeptes du Rechercher / Remplacer, problème de phrase
    Par opacho dans le forum VBA Word
    Réponses: 7
    Dernier message: 19/08/2011, 21h38
  2. Réponses: 8
    Dernier message: 05/10/2004, 00h02
  3. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07

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