Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/08/2007, 00h30   #1
Membre actif
 
Homme Arnaud
Inscription : décembre 2006
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2006
Messages : 871
Points : 195
Points : 195
Par défaut Ajouter chaine de caractère à la suite d'une chaine déjà existante dans un fichier

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 !
__________________
www.SonolightDj.com
Prestataire sonorisation et lumière
arnaudperfect est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 00h55   #2
Nouveau Membre du Club
 
Étudiant
Inscription : octobre 2006
Messages : 61
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2006
Messages : 61
Points : 35
Points : 35
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
herrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 09h19   #3
Membre actif
 
Homme Arnaud
Inscription : décembre 2006
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2006
Messages : 871
Points : 195
Points : 195
et comment je peux faire ca ?
__________________
www.SonolightDj.com
Prestataire sonorisation et lumière
arnaudperfect est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 09h35   #4
Membre actif
 
Homme Arnaud
Inscription : décembre 2006
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2006
Messages : 871
Points : 195
Points : 195
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...
__________________
www.SonolightDj.com
Prestataire sonorisation et lumière
arnaudperfect est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 10h37   #5
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 306
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 306
Points : 8 590
Points : 8 590
Citation:
Envoyé par arnaudperfect
Le soucie, malgrès lire le man, je n'arrive pas à trouvé la bonne syntaxe...
Bienvenu dans le monde des manuels Unix 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
A tester, je fais ça come ça en live. A adapter si nécessaire en fonction de l'OS...

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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 11h31   #6
Membre actif
 
Homme Arnaud
Inscription : décembre 2006
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 27
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2006
Messages : 871
Points : 195
Points : 195
Merci de tes explications Mac !

Ca marche nickel
__________________
www.SonolightDj.com
Prestataire sonorisation et lumière
arnaudperfect est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h11.


 
 
 
 
Partenaires

Hébergement Web