Problème shell. Recherch ds une liste
Ynsouk
Messages postés
104
Date d'inscription
Statut
Membre
Dernière intervention
-
Ynsouk Messages postés 104 Date d'inscription Statut Membre Dernière intervention -
Ynsouk Messages postés 104 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'utilise le shell.
J'ai une liste m'affichant dans un fichier les utilisateurs du système et leur quotas.
je veux augmenter dans la liste le quota d'un utilisateur donné
J'entre en paramètre d'une fonction l'utilisateur et le no,bre à ajouté.
Mon problème c'est que j'arrive pas rechercher dans la liste l'utilisateur saisi en param. Pouvez vous m'aider un peu.Merci
j'utilise le shell.
J'ai une liste m'affichant dans un fichier les utilisateurs du système et leur quotas.
je veux augmenter dans la liste le quota d'un utilisateur donné
J'entre en paramètre d'une fonction l'utilisateur et le no,bre à ajouté.
Mon problème c'est que j'arrive pas rechercher dans la liste l'utilisateur saisi en param. Pouvez vous m'aider un peu.Merci
A voir également:
- Problème shell. Recherch ds une liste
- Liste déroulante excel - Guide
- Classic shell - Télécharger - Personnalisation
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
10 réponses
Salut,
grep "$1" fichierOu "$1" est le premier paramètre (nom utilisateur) et <"ital>fichier</ital>" le fichier contenant la liste.
bonsoir,
toutes mes excuses pr le silence; en fait c'est du à l'instabilité de la connexion chez nous.
Merci pour la comprehension.
je crois que grep ne va pas résoudre le problème.
je le repose.
j'ai un fichier qui est sous cette forme
user 1 1000
user2 2000
je veux modifier la valeur 1000 de user1 par une autre valeur par exemple. Il me faudra chercher la ligne correspondant à l'utilisateur user1. en fait j'entre l'utilisateur(ici user1) en paramètre. et après je dois enregistrer le fichier après avoir modifié la valeur.
Mon problème se situe au niveau de la manière dont je vais rechercher l'utilisateur pour pouvoir modifier sa valeur.
j'ai lu un doc et je crois que sed peut me permettre de résoudre le problème. Mais je n'ai pas encore vu d'exemple et je suis pour le moment planté. Merci de bien vouloir m'aider.
toutes mes excuses pr le silence; en fait c'est du à l'instabilité de la connexion chez nous.
Merci pour la comprehension.
je crois que grep ne va pas résoudre le problème.
je le repose.
j'ai un fichier qui est sous cette forme
user 1 1000
user2 2000
je veux modifier la valeur 1000 de user1 par une autre valeur par exemple. Il me faudra chercher la ligne correspondant à l'utilisateur user1. en fait j'entre l'utilisateur(ici user1) en paramètre. et après je dois enregistrer le fichier après avoir modifié la valeur.
Mon problème se situe au niveau de la manière dont je vais rechercher l'utilisateur pour pouvoir modifier sa valeur.
j'ai lu un doc et je crois que sed peut me permettre de résoudre le problème. Mais je n'ai pas encore vu d'exemple et je suis pour le moment planté. Merci de bien vouloir m'aider.
[tmpfs]$ cat fich user1 1000 user2 2000 user3 3000 user4 4000 user5 5000 [tmpfs]$ cat foo.sh #! /bin/sh #set -xv sed "/$1/ s/ .*/ $2/" $3 [tmpfs]$ ./foo.sh user2 8000 fich user1 1000 user2 8000 user3 3000 user4 4000 user5 5000 [tmpfs]$ ./foo.sh user5 2000 fich user1 1000 user2 2000 user3 3000 user4 4000 user5 2000 [tmpfs]$Si tu veux que les changements soient permanents, rajoute "-i.bak" à la commande "sed" :
sed -i.bak "/$1/ s/ .*/ $2/" $3L'option "-i" modifie le fichier sur place, le ".bak" permet de créer une copie du fichier original au cas ou...
merci, je veux comprendre un peu; je suis dans un cybercafé et je n'exécuterai qu'une fois arrivé à la maison; et je n'ai plus accès au net à la maison.
le sed "/$1/ s/ .*/ $2/" $3 recherche $1 et $2 et si il existe $3 si je comprends bien(c 'est a dire les valeurs entrées en paramètre).
alors cette instrucion veut dire quoi svp [tmpfs]$ ./foo.sh user2 8000 fich.
je suppose que foo.sh exécute le script et fich est le fichier à modifier. est ce exact?
le sed "/$1/ s/ .*/ $2/" $3 recherche $1 et $2 et si il existe $3 si je comprends bien(c 'est a dire les valeurs entrées en paramètre).
alors cette instrucion veut dire quoi svp [tmpfs]$ ./foo.sh user2 8000 fich.
je suppose que foo.sh exécute le script et fich est le fichier à modifier. est ce exact?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait foo.sh est un script bash qui prend 3 paramètres en entrée :
$1 = le nom de l'utilisateur
$2 = le nouveau quota
$3 = le nom du fichier
ces paramètres sont passés à la commande "sed" (attention de bien entourer la syntaxe de "sed" avec des quotes doubles) et sont interprétés comme suit :
/$1/
Motif recherché (le nom de l'utilisateur)
s/ .*/$2/
On substitue (commande "s") tout ce qui se trouve après un espace et ce jusqu'à la fin de la ligne ( .*) par la valeur du second paramètre ($2)
$1 = le nom de l'utilisateur
$2 = le nouveau quota
$3 = le nom du fichier
ces paramètres sont passés à la commande "sed" (attention de bien entourer la syntaxe de "sed" avec des quotes doubles) et sont interprétés comme suit :
/$1/
Motif recherché (le nom de l'utilisateur)
s/ .*/$2/
On substitue (commande "s") tout ce qui se trouve après un espace et ce jusqu'à la fin de la ligne ( .*) par la valeur du second paramètre ($2)
Bjr Jipicy,
Merci pour ton aide ca fait grandir petit à petit le shell en moi.
la commande sed marche mais il y a encore un petit problème.
En fait le fichier dans lequel je veux faire la modification comporte 3 colonnes. lorsque le sed est appliqué je ne vois plus la valeur existante dans la 3e colonne de la ligne que j'ai modifiée.
Exemple
user1 1000 admin
user2 2000 admin
user3 3000 user
user4 4000 user
si je modifie la ligne de user1 par exemple , j'ai en résultat
user1 6000
user2 2000 admin
user3 3000 user
user4 4000 user
(6000 étant la nouvelle valeur de user1).
j 'au donné en argument à sed 4 paramètres mais ca na pa marché.
Y ' at il une option de sed me permettant de garder la valeur de la 3e colonne?.
Merci.
Merci pour ton aide ca fait grandir petit à petit le shell en moi.
la commande sed marche mais il y a encore un petit problème.
En fait le fichier dans lequel je veux faire la modification comporte 3 colonnes. lorsque le sed est appliqué je ne vois plus la valeur existante dans la 3e colonne de la ligne que j'ai modifiée.
Exemple
user1 1000 admin
user2 2000 admin
user3 3000 user
user4 4000 user
si je modifie la ligne de user1 par exemple , j'ai en résultat
user1 6000
user2 2000 admin
user3 3000 user
user4 4000 user
(6000 étant la nouvelle valeur de user1).
j 'au donné en argument à sed 4 paramètres mais ca na pa marché.
Y ' at il une option de sed me permettant de garder la valeur de la 3e colonne?.
Merci.
Salut,
Essaie
Essaie
sed "/$1/ s/^.* /$1 $2 /" $3
bonjour quand j'ai exécuté sed "/$1/ s/^.* /$1 $2 /" $3
j'ai eu comme resulta
user11000 admin
alors j'ai exécuté lea commande de jipicy sed "/$1/ s/ [^ ]*/ $2/" $3
ca a marché.
j voulu amelioré.
alors je donne en paramètre la valeur l'utilisateur une valeur et le fichier mais cette fois ci la valeur entrée en paramètre
ne modifiera plus l'ancienne elle sajoutera à ca. j'ai evidemment réussi l'addition il affiche la nouvelle valeur mais le problème c'est qu'il garde l'ancienne aussi.
je peu recevoir un coup de pouce?
j'ai eu comme resulta
user11000 admin
alors j'ai exécuté lea commande de jipicy sed "/$1/ s/ [^ ]*/ $2/" $3
ca a marché.
j voulu amelioré.
alors je donne en paramètre la valeur l'utilisateur une valeur et le fichier mais cette fois ci la valeur entrée en paramètre
ne modifiera plus l'ancienne elle sajoutera à ca. j'ai evidemment réussi l'addition il affiche la nouvelle valeur mais le problème c'est qu'il garde l'ancienne aussi.
je peu recevoir un coup de pouce?
//pour recuperer la valeur correspondant à l'utilisateur saisi en paramètre
//user_quota est le fichier qui renferme les utilisateurs et les valeurs
valeur_ancienne=`cat user_quota | grep $1 | awk '{print $2}'`
valeur_nouvelle=$[$valeur_ancienne + $2] //dans ce cas $2 represente la valeur entrée en paramètre
sed "/$1/ s/ [^ ]*/ $valeur_nouvelle/" $3
supposons k'il a modifié la valeur de user1 ki était à 200 à 600.
il m'affiche dans user_quota
user1 200 600 admin
je ne veux plus avoir les 200. Merci et j'expr ke j'ai un peu expliqué le problème
//user_quota est le fichier qui renferme les utilisateurs et les valeurs
valeur_ancienne=`cat user_quota | grep $1 | awk '{print $2}'`
valeur_nouvelle=$[$valeur_ancienne + $2] //dans ce cas $2 represente la valeur entrée en paramètre
sed "/$1/ s/ [^ ]*/ $valeur_nouvelle/" $3
supposons k'il a modifié la valeur de user1 ki était à 200 à 600.
il m'affiche dans user_quota
user1 200 600 admin
je ne veux plus avoir les 200. Merci et j'expr ke j'ai un peu expliqué le problème