Sed et les occurences

Résolu
Bonjour,

J'ai un fichier. Dans ce fichier, j'ai plusieurs champs :

<password>motdepasse1</password>
<password>motdepasse2</password>
<password>motdepasse3</password>
...

J'ai une commande trouvé sur le net et adapté à mes besoins :
sed -n 's,.*<password>\(.*\)</password>,\1,p' fichier

Cette commande me sort :
motdepasse1
motdepasse2
motdepasse3

Normal. Mais je souhaite par contre (et c'est maintenant que je fais appel à vous ;) ) ne récupérer, par exemple, que "motdepasse2". Je sais par contre que ce mot de passe est placé en second dans le fichier..

Pouvez-vous m'aider ?

Merci d'avance.

Cordialement,

Seb.



--

Occupez vous de mes amis. Pour ce qui est de mes ennemis, je m'en charge.

8 réponses

  1. Ahhhhhhhhhhhh bah oui effectivement.

    Encore merci ;)

    Occupez vous de mes amis. Pour ce qui est de mes ennemis, je m'en charge.
    1. C'est exactement ce qu'il me fallait.

      Cependant, j'ai un petite question (je ne comprend pas la totalité de la ligne de commande mais je pense avoir compris le principe qui est de rechercher un mot "MON_LOGIN" par exeple et de chercher ce qu'il y a en dessous ?) :

      Tu as mis :

      sed -n '/>Admin/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt

      Alors que dans les autres commandes, le chevron n'est pas présent. Pourquoi ? Faute de frappe ?

      En tout cas, merci beaucoup !


      Occupez vous de mes amis. Pour ce qui est de mes ennemis, je m'en charge.
      1. Modérateur
        Re,

        Le chevron je l'ai utilisé puisque si j'aurais mis juste Admin c'est toujours SuperAdmin qui aurait été reconnu. Comme ça j'oblige la regex de reconnaître le motif >Admin
    2. Modérateur
      Re,

      Et pour mettre un mot de passe ici (si j'ai bien compris)
      		<max_players>PLAYERS</max_players>
      		<password></password>
      tu peux faire par exemple

      sed -i.orig '/PLAYERS/{n;s/\(.*>\)\(.*\)\(<.*\)/\1NEWPASS\3/}' dedicated_cfg.txt
      1. Et en plus tu répond à ma question avant que je n'ai pu m'y pencher.

        Un très grand merci !
      2. Modérateur
        Ben, chez moi ça marche. Voici le test
        ~$ sed -n '/PLAYERS/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt 
        
        ~$ sed -i.orig '/PLAYERS/{n;s/\(.*>\)\(.*\)\(<.*\)/\1NEWPASS\3/}' dedicated_cfg.txt 
        ~$ sed -n '/PLAYERS/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt 
        NEWPASS
        ~$ sed -n '/PLAYERS/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt.orig 
        
        ~$ 
      3. Oui effectivement, mais c'est juste que moi, je ne teste pas avec l'original et j'ai une autre valeur à la place de PLAYERS. Mais j'ai changé et ça marche en fait.

        Je ne pensais pas que tu allais le lire entre le moment où je l'ai écris et modifier.

        Mais ça marche, c'est le principal.

        Merci.
      4. Modérateur
        De rien ;-)
        Bonne continuation.
    3. Modérateur
      Re,

      Par exemple pour récupération
      :~$ sed -n '/>Admin/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt   
      A_PASSWORD  
      r:~$ sed -n '/SuperAdmin/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt   
      SA_PASSWORD  
      r:~$ sed -n '/User/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt   
      U_PASSWORD
      :~$ sed -n '/MON_LOGIN/{n;s/.*>\(.*\)<.*/\1/;p;}' dedicated_cfg.txt 
      MON_PASSWORD
      


      GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
      106485010510997108
      1. Sur le principe oui.

        En réalité, à un moment où a un autre, je vais avoir besoin de récupérer autre chose que celui-là. Pour le moment, celui qui m'intéresse le plus c'est "MON_PASSWORD". Mais je vais aussi avoir besoin de récupérer "SA_PASSWORD" ainsi que mettre un mot de passe dans le champ :
        <password></password>
        qui est vide. Sachant que la place de ces champs ne bougent pas (le mot de passe SA est toujours le premier, le Admin est toujours le 2nd ....) et que je ne connais pas ce qui se trouve entre ces balises "password".

        Je ne sais pas si tu as compris ...
        1. Bonsoir,

          Voici le fichier original (traité par la suite par un script pour le remplacement de certaines données)

          https://www.cjoint.com/?0mBaePeCOKF

          Merci.
          1. Modérateur
            D'après ce que j'ai compris tu veux obtenir A_PASSWORD ?
            Donc le 2ème?
        2. Bonsoir,

          Malheureusement, cette commande ne renvoie rien chez moi ...

          seb@serveur:~$ sed -n '2 s,.*<password>\(.*\)</password>,\1,p' serveurTM/GameData/Config/dedicated_cfg.txt
          seb@serveur:~$


          1. Modérateur
            Re,

            Alors fait voir ton fichier ou mets le sur cjoint
        3. Modérateur
          Salut,

           sed -n '2 s,.*<password>\(.*\)</password>,\1,p' fichier