|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Arnaud Inscription : décembre 2006 Messages : 871 ![]() |
Bonjour,
J'aimerai savoir comment je peux ajouter une chaine de caractère à la suite d'une chaine déjà existante dans un fichier : exemple : Je veux ajouter un utilisateur "michel" à un groupe "users" dans /etc/gshadow : root:: titi:: users::martin::michel tomcat:: Ne me dite pas utilise groupadd, car en faite je dois faire un script à la norme POSIX, et groupadd n'est pas à cette norme... ![]() Merci d'avance de votre aide ! |
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Étudiant Inscription : octobre 2006 Messages : 61 ![]() |
bonjour,
le plus simple est de parcourir ton fichier en stockant tes infos, et apres tu reecris ton fichier en ajoutant ton nom sur la bonne ligne |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Arnaud Inscription : décembre 2006 Messages : 871 ![]() |
et comment je peux faire ca ?
|
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Arnaud Inscription : décembre 2006 Messages : 871 ![]() |
Avec SED onm'a dit qu'on pouvait le faire, mais comment ?
on m'as parlé d'un truc du genre SED "fichier_source" "ligne à modifier" "la_ligne_à_modifier+la_nouvelle_chaine" > "fichier source" Le soucie, malgrès lire le man, je n'arrive pas à trouvé la bonne syntaxe... |
|
|
00
|
|
|
#5 | |
![]() ![]() Inscription : août 2005 Messages : 8 306 ![]() |
Citation:
C'est clair que c'est pas facile à lire parfois, surtout celui de sed. Un lien qui pourrait t'aider : http://www.grymoire.com/Unix/Sed.html. Y a plein d'exemples et de cas pratiques, ça aide à comprendre l'outil. Ceci dit, la base de sed, ce sont les expressions régulières donc faut être familiarisé avec la bête.Pour ton truc, il faut utiliser le mécanisme de substitution de base de sed : s/filtre/transformation/ Il te faut donc d'abord une expression régulière qui te permette d'identifier de manière certaine la ligne à modifier. Je te propose ceci : "^users:" à interpréter comme "la ligne qui commence par "users:"" (^ = début de ligne). Ca me semble pas mal. Il te faut ensuite une transformation. Dans ton cas, tu veux ajouter un truc en fin de ligne, donc ça doit être assez simple : "\0::ajout" à condition que \0 contienne toute la ligne. Donc pour utiliser ça, faut modifier le filtre pour faire "contenir" toute la ligne dans \0 : "^users:.*$". D'où finalement, si l'utilisateur à ajouter est contenu dans la variable shell $user : Code :
sed 's/^users:.*$/\0::'$user'/' /etc/groups > /etc/groupsbis Pour la petite histoire, il vaut mieux utiliser les guillemets simples ' pour les expressions sed afin d'éviter les mauvaises substitutions ou interprétation du caractère $ (indicateur de fin de ligne). D'où, qu'il faut fermer le ' et le rouvrir après pour pouvoir substituer $user par sa valeur (c'est du shell de base).
__________________
![]() Du détail, du détail, du détail !!! Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
|
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Arnaud Inscription : décembre 2006 Messages : 871 ![]() |
Merci de tes explications Mac !
Ca marche nickel |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com