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 -
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.
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.
A voir également:
- Sed et les occurences
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Sed et ses caprices (ou les miens) ✓ - Forum Linux / Unix
- Sed - Remplacement texte par retour à la ligne ? ✓ - Forum Linux / Unix
- Sed crlf - Astuces et Solutions
- Sed supprimer ligne vide - Forum Linux / Unix
8 réponses
Bonsoir,
Malheureusement, cette commande ne renvoie rien chez moi ...
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:~$
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.
Voici le fichier original (traité par la suite par un script pour le remplacement de certaines données)
https://www.cjoint.com/?0mBaePeCOKF
Merci.
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 ...
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 ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Par exemple pour récupération
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
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
Re,
Et pour mettre un mot de passe ici (si j'ai bien compris)
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
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 ~$
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 :
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.
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.