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. Modérateur
    Salut,

     sed -n '2 s,.*<password>\(.*\)</password>,\1,p' fichier
    1. 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
    2. 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?
    3. 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. 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. 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.
        2. 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
        3. Ahhhhhhhhhhhh bah oui effectivement.

          Encore merci ;)

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