Ksh modifier un fichier
Résolu
rojina2903
Messages postés
96
Date d'inscription
Statut
Membre
Dernière intervention
-
Emma -
Emma -
bonjour à toutes et à tous
je souhaite creer un script ksh qui modifie une chaine de caractère dans un fichier
mediapost.txt:
HEXAPOST_SEQ=01
HEXAVIA_SEQ=21
HEXACLE_SEG=41
CEDEXA_SEQ=61
SEMAINE=0
je souhaite modifier la derniere ligne par exemple au lieu de 0 avoir un 1
j'ai utilisé la commande "sed" comme suit:
test.ksh
#!/usr/bin/ksh
var=7
fichier=$PWD/mediapost.txt
echo `cat "$fichier" | sed "s/SEMAINE=[^#]*/SEMAINE=$var/"`>$fichier
cela marche mais pour moi c'est une très mauvaise solution vu qye ça ecrase tout le contenu et le réecrit ensuite après modification et puis ça modifie aussi la structure du fichier
mediapost.txt après les modifications:
HEXAPOST_SEQ=01 HEXAVIA_SEQ=21 HEXACLE_SEG=41 CEDEXA_SEQ=61 SEMAINE=7
est ce que vous avez une autre idée, soit en modifiant celle là ou une autre
merci d'avance pour votre aide
je souhaite creer un script ksh qui modifie une chaine de caractère dans un fichier
mediapost.txt:
HEXAPOST_SEQ=01
HEXAVIA_SEQ=21
HEXACLE_SEG=41
CEDEXA_SEQ=61
SEMAINE=0
je souhaite modifier la derniere ligne par exemple au lieu de 0 avoir un 1
j'ai utilisé la commande "sed" comme suit:
test.ksh
#!/usr/bin/ksh
var=7
fichier=$PWD/mediapost.txt
echo `cat "$fichier" | sed "s/SEMAINE=[^#]*/SEMAINE=$var/"`>$fichier
cela marche mais pour moi c'est une très mauvaise solution vu qye ça ecrase tout le contenu et le réecrit ensuite après modification et puis ça modifie aussi la structure du fichier
mediapost.txt après les modifications:
HEXAPOST_SEQ=01 HEXAVIA_SEQ=21 HEXACLE_SEG=41 CEDEXA_SEQ=61 SEMAINE=7
est ce que vous avez une autre idée, soit en modifiant celle là ou une autre
merci d'avance pour votre aide
A voir également:
- Ksh modifier un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Modifier dns - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
6 réponses
Salut,
Essaie comme ça :
"ATTENTION !!!" : Il ne faut pas d'espace entre les 2 crochets ouvrant de "[digit]", dans l'exemple ci-après c'est juste pour palier l'interprétation de ces caractères par la syntaxe propre à CCM ;-(
Si tu veux que ce soit permanet, utilises l'option "-i" (modification en place) de sed :
Essaie comme ça :
"ATTENTION !!!" : Il ne faut pas d'espace entre les 2 crochets ouvrant de "[digit]", dans l'exemple ci-après c'est juste pour palier l'interprétation de ces caractères par la syntaxe propre à CCM ;-(
[jp@MDK-2008 trash]$ cat fichier.txt HEXAPOST_SEQ=01 HEXAVIA_SEQ=21 HEXACLE_SEG=41 CEDEXA_SEQ=61 SEMAINE=0 [jp@MDK-2008 trash]$ var=7;sed "/SEMAINE/ s/[ [:digit:]]/$var/" fichier.txt HEXAPOST_SEQ=01 HEXAVIA_SEQ=21 HEXACLE_SEG=41 CEDEXA_SEQ=61 SEMAINE=7 [jp@MDK-2008 trash]$
Si tu veux que ce soit permanet, utilises l'option "-i" (modification en place) de sed :
[jp@MDK-2008 trash]$ cat fichier.txt HEXAPOST_SEQ=01 HEXAVIA_SEQ=21 HEXACLE_SEG=41 CEDEXA_SEQ=61 SEMAINE=0 [jp@MDK-2008 trash]$ var=7;sed -i.bak "/SEMAINE/ s/[ [:digit:]]/$var/" fichier.txt [jp@MDK-2008 trash]$ cat fichier.txt HEXAPOST_SEQ=01 HEXAVIA_SEQ=21 HEXACLE_SEG=41 CEDEXA_SEQ=61 SEMAINE=7 [jp@MDK-2008 trash]$;-))
quand je fais:
sed "/SEMAINE/ s/[ [:digit:] ]/$var/" mediapost.txt
il m'affiche le bon résultat (ce que je veux) mais il modifie pas le fichier mediapost.txt
et si je fais:
`sed "/SEMAINE/ s/[ [:digit:] ]/$var/" mediapost.txt`>mediapost.txt
tout le contenu de mediapost.txt est s'ecrase alors j'obtiens un fichier vide, c'est pour cela que je fai un echo pour pouvoir ecrire dans le fichier
donc comment je dois faire?
sed "/SEMAINE/ s/[ [:digit:] ]/$var/" mediapost.txt
il m'affiche le bon résultat (ce que je veux) mais il modifie pas le fichier mediapost.txt
et si je fais:
`sed "/SEMAINE/ s/[ [:digit:] ]/$var/" mediapost.txt`>mediapost.txt
tout le contenu de mediapost.txt est s'ecrase alors j'obtiens un fichier vide, c'est pour cela que je fai un echo pour pouvoir ecrire dans le fichier
donc comment je dois faire?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionsed "/SEMAINE/ s/[ [:digit:] ]/$var/" mediapost.txt > fich.tmp && mv -f fich.tmp mediapost.txt;-))
coucou je cherche la même chose mais juste que le nouveau nombre soit le nombre que l'utilisateur a tapé.
exemple :
dans le fichier.txt : test=0
la console demande : quelle est la nouvelle valeur ? réponse :
l'utilisateur tape 7
et la modification se fait dans le fichier de façon permanente
merci d'avance :)
exemple :
dans le fichier.txt : test=0
la console demande : quelle est la nouvelle valeur ? réponse :
l'utilisateur tape 7
et la modification se fait dans le fichier de façon permanente
merci d'avance :)
j'ai essayé et ça marche sauf que c'est le meme probleme que j'avait (presque) ça modifie la structure de mon fichier
je suis obligé d'ecrasé le contenu et de réecrire avec ">" afin de voir la modification sur le fichier et c 'est ce qui cause ce changement de forme
je fais:
echo `sed "/SEMAINE/ s/[ [:digit:] ]/$var/" mediapost.txt`>mediapost.txt
et ça donne:
HEXAPOST_SEQ=01 HEXAVIA_SEQ=21 HEXACLE_SEG=41 CEDEXA_SEQ=61 SEMAINE=7
merci