Problème shell. Recherch ds une liste
Fermé
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
-
19 janv. 2009 à 19:11
Ynsouk Messages postés 104 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 6 octobre 2009 - 30 janv. 2009 à 18:39
Ynsouk Messages postés 104 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 6 octobre 2009 - 30 janv. 2009 à 18:39
A voir également:
- Problème shell. Recherch ds une liste
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Liste de diffusion whatsapp - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
10 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
19 janv. 2009 à 19:19
19 janv. 2009 à 19:19
Salut,
grep "$1" fichierOu "$1" est le premier paramètre (nom utilisateur) et <"ital>fichier</ital>" le fichier contenant la liste.
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
2
24 janv. 2009 à 20:20
24 janv. 2009 à 20:20
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.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
24 janv. 2009 à 20:34
24 janv. 2009 à 20:34
[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...
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
2
24 janv. 2009 à 21:05
24 janv. 2009 à 21:05
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
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
2
24 janv. 2009 à 21:26
24 janv. 2009 à 21:26
rectificatif foo.sh est le fichier exécutant le script
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
24 janv. 2009 à 23:33
24 janv. 2009 à 23:33
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)
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
2
27 janv. 2009 à 09:33
27 janv. 2009 à 09:33
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.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 janv. 2009 à 09:52
27 janv. 2009 à 09:52
Salut,
Essaie
Essaie
sed "/$1/ s/^.* /$1 $2 /" $3
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
27 janv. 2009 à 10:40
27 janv. 2009 à 10:40
Salut,
Je dirai plutôt :
Je dirai plutôt :
sed "/$1/ s/ [^ ]*/ $2/" $3Attention il y a un espace avant le 1er crochet...
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
27 janv. 2009 à 10:43
27 janv. 2009 à 10:43
Salut,
Je n'ai pas des moyens pour tester.
user1 1000 admin
/.* / normalement va avaler tout jusqu'au admin
En ce moment je fait le remplacement de /.* / avec
/$1 $2 /
(admin - la 3ème colonne n'est pas touché normalement)
user1 LE2ARGUMENT admin
Je n'ai pas des moyens pour tester.
user1 1000 admin
/.* / normalement va avaler tout jusqu'au admin
En ce moment je fait le remplacement de /.* / avec
/$1 $2 /
(admin - la 3ème colonne n'est pas touché normalement)
user1 LE2ARGUMENT admin
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
27 janv. 2009 à 11:02
27 janv. 2009 à 11:02
Yes, t'as raison, désolé, en voyant ta syntaxe j'ai cru que la regex allait tout avaler ;-[
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
27 janv. 2009 à 12:01
27 janv. 2009 à 12:01
Merci ;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
27 janv. 2009 à 12:03
27 janv. 2009 à 12:03
De rien ;-))
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
2
30 janv. 2009 à 17:14
30 janv. 2009 à 17:14
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?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
30 janv. 2009 à 18:06
30 janv. 2009 à 18:06
Affiche ta syntaxe et le résultat escompté, on y verra plus clair ;-))
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
2
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
30 janv. 2009 à 18:28
30 janv. 2009 à 18:28
//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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
30 janv. 2009 à 18:32
30 janv. 2009 à 18:32
sed "/$1/ s/$valeur_ancienne/$valeur_nouvelle/" $3
Ynsouk
Messages postés
104
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
6 octobre 2009
2
30 janv. 2009 à 18:39
30 janv. 2009 à 18:39
ok je testerai ca à la mson et je te dirai la reponse 2min.merci