|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre habitué
![]() Étudiant Inscription : janvier 2006 Messages : 501 ![]() |
Bonsoir,
J'aimerais stocker des infos dans un fichier, sur chaque ligne les infos sont écrites dans un "meme format", par ex : Citation:
et savoir si c'est possible de changer qu'une seule info sur une ligne, par exemple que info31 et non remettre toute la ligne Merci ++ |
|
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
En shell bash, la seule façon simple qui y ressemble est la suivante :
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Étudiant Inscription : janvier 2006 Messages : 501 ![]() |
Euh ben justement je me demande quels limititeurs utilisés, les ||| c'est pas recommandé ?
sed ne peut etre utilisé avec une variable au lieu d'un fichier ? par exemple quand je remplace NomDeFichier par une variable qui contient une certaine ligne du fichier, ca ne fonctionne pas... Et c'est possible de mettre dans des variables différentes, par ex var1, var2, var3 les infos d'une ligne ? Il faut utiliser les expressions régulières ? En php, je sais qu'on aurait pu faire un "explode" pour mettre dans un tableau mais la je pense pas que c'est possible.. merci ++ |
|
|
00
|
|
|
#4 |
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 24 ![]() |
un truc dans ce genre la devrait marcher je pense:
Code :
echo $TaVariable | sed 's/info31/Nouvinfo/' > YourFile Code :
TaVariable="info11|||info21|||info31"; VariableReceptrice=`echo $TaVariable | sed 's/info31/Nouvinfo/'`; echo $VariableReceptrice |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Étudiant Inscription : janvier 2006 Messages : 501 ![]() |
Et bien en fait, pour réexpliquer ce que j'essaie de faire :
-Stocker des informations dans un fichier -Chaque ligne contient les memes genres d'information (délimité par des caracteres : ||| ou autre...) , ex : info1|||info2|||info3|||info4 bla1|||bla2|||bla3|||bla4 etc... et ensuite manipuler ce fichier de données, pour insérer une ligne c'est pas bien compliqué mais ca se complique pour récupérer les infos d'une ligne, par exemple, récuperer dans des varirables les infos d'une meme ligne comme ca : $var1 contiendra info1 $var2 contiendra info2 $var3 contiendra info3 $var4 contiendra info4 si je veux la 1ere ligne. Et l'autre problème, c'est pour modifier l'info d'une ligne sans forcément réécrire la ligne entiere, par exemple a la place de info3 de la premiere ligne, mettre "coucou" Vous voyez ce que je veux dire ? Pouvez-vous m'expliquer rapidement awk ? Il me semble que ce serait intéressant de l'utiliser en effet. |
|
|
00
|
|
|
#6 | ||||
![]() Inscription : mars 2004 Messages : 1 298 ![]() |
en générale 1 seul caractère de délimitation doit suffire, les "outils" unix te permettront de manipuler correctement tes "champs" dans une ligne de cette façon.
ensuite extraitre les variables d'une ligne ne te poserons pas de probleme exemple : Code :
Code :
|
||||
|
|
00
|
|
|
#7 | ||||
|
Membre à l'essai
![]() Inscription : avril 2007 Messages : 24 ![]() |
2 exemple d'utilisation d'awk qui pourraient t'aider si tu veux, c'est un truc qui permet de faire vachement de choses sans trop de difficultés... si on connait un peu
Code :
Code :
|
||||
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Étudiant Inscription : janvier 2006 Messages : 501 ![]() |
Ok merci je vais me débrouiller avec tout ca maintenant alr
++ |
|
|
00
|
|
|
#9 | ||||||
|
Membre émérite
![]() Inscription : mai 2004 Messages : 709 ![]() |
Si tu veux vraiment imiter la fonction explode() de PHP il faut que les champs vides soient assignés comme null dans l'élément du tableau.
un:deux::quatre explosé sur : doit retourner a[0] => un a[1] => deux a[2] => a[3] => quatre Le remplacement des : par des espaces va masquer les champs vides: un:deux::quatre devient un deux quatre (avec deux espaces entre 2 et 4). Du coup, l'assignation bash a=(un deux quatre) va retourner: a[0] => un a[1] => deux a[2] => quatre De plus, les champs contenant un espace seront explosés. Comme dans par exemple: un:deux::quatre:et la fin Solution en bash (assez tirée par les cheveux je l'avoue) Code :
Code :
Code :
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT Jabber: ripat at im.apinc.org |
||||||
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Étudiant Inscription : janvier 2006 Messages : 501 ![]() |
Re
J'ai un petit probleme en fait encore.. Je sais qu'avec sed je peux changer quelque chose dans un fichier, mais le probleme c'est que j'aimerais changer cette occurence que sur une ligne, et donc si je fais un sed sur tout le fichier, il changera partout ce que je veux changer... alors que je veux pas changer dans tout le fichier... vous voyez ce que je veux dire ? |
|
|
00
|
|
|
#11 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 709 ![]() |
Tu peux filtrer la substitution de sed avec un masque:
Code :
# sed '/masque/ s/a remplacer/par ceci/g'
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT Jabber: ripat at im.apinc.org |
|
|
00
|
|
|
#12 | |
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
Citation:
Fichier de données tst.txt : info1;info2;TEXT3;info4 bla1;bla2;TEXT3;bla4 Sélection sur le n° de la ligne ou sur un "motif" : $ sed "2s/TEXT3/AUTRE/" tst.txt info1;info2;TEXT3;info4 bla1;bla2;AUTRE;bla4 $ sed "/bla1/s/TEXT3/AUTRE/" tst.txt info1;info2;TEXT3;info4 bla1;bla2;AUTRE;bla4 http://pwet.fr/man/linux/commandes/sed |
|
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Étudiant Inscription : janvier 2006 Messages : 501 ![]() |
ok merci
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com