Sed et les occurences

Résolu
gaston77 Messages postés 495 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

     sed -n '2 s,.*<password>\(.*\)</password>,\1,p' fichier
    0
  2. gaston77 Messages postés 495 Statut Membre 34
     
    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:~$


    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Alors fait voir ton fichier ou mets le sur cjoint
      0
  3. gaston77 Messages postés 495 Statut Membre 34
     
    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.
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      D'après ce que j'ai compris tu veux obtenir A_PASSWORD ?
      Donc le 2ème?
      0
  4. gaston77 Messages postés 495 Statut Membre 34
     
    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 ...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    0
    1. gaston77 Messages postés 495 Statut Membre 34
       
      Et en plus tu répond à ma question avant que je n'ai pu m'y pencher.

      Un très grand merci !
      0
    2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      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 
      
      ~$ 
      0
    3. gaston77 Messages postés 495 Statut Membre 34
       
      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.
      0
    4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      De rien ;-)
      Bonne continuation.
      0
  8. gaston77 Messages postés 495 Statut Membre 34
     
    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.
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      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
      0
  9. gaston77 Messages postés 495 Statut Membre 34
     
    Ahhhhhhhhhhhh bah oui effectivement.

    Encore merci ;)

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