Sed et les occurences

Résolu
gaston77 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 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.



8 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

 sed -n '2 s,.*<password>\(.*\)</password>,\1,p' fichier
0
gaston77 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Alors fait voir ton fichier ou mets le sur cjoint
0
gaston77 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
D'après ce que j'ai compris tu veux obtenir A_PASSWORD ?
Donc le 2ème?
0
gaston77 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

Un très grand merci !
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
gaston77 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
De rien ;-)
Bonne continuation.
0
gaston77 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
gaston77 Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   34
 
Ahhhhhhhhhhhh bah oui effectivement.


Encore merci ;)

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