Ksh modifier un fichier

Résolu/Fermé
rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009 - 11 juil. 2008 à 16:06
 Emma - 15 juil. 2008 à 15:51
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
A voir également:

6 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 897
11 juil. 2008 à 16:31
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 ;-(
[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]$
;-))
0
rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009 13
11 juil. 2008 à 17:09
salu jipicy

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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
11 juil. 2008 à 17:26
Mais pourquoi fais-tu un "echo" ?! ;-\

Passe directement ton fichier à "sed" !
0
rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009 13
11 juil. 2008 à 17:33
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?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
11 juil. 2008 à 17:38
La réponse est dans mon 1er post !!! Il faut utiliser l'option "-i" de sed !
0
rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009 13
11 juil. 2008 à 17:47
oui c'est vrai mais il m'affiche que c'est une option illegale
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
11 juil. 2008 à 17:52
sed "/SEMAINE/ s/[ [:digit:] ]/$var/" mediapost.txt > fich.tmp && mv -f fich.tmp mediapost.txt
;-))
0
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 :)
0
rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009 13 > Emma
15 juil. 2008 à 11:21
salut

c'est la meme ligne de commande que jipicy a donné

cat fichier.ksh

#!/usr/bin/ksh

echo Saisir la nouvelle valeur
read val
`sed "/test/ s/[ [:digit:] ]/$val/" fichier.txt >fich.tmp && mv -f fich.tmp fichier.txt`



cat fichier.txt

test=0
0
Emma > rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009
15 juil. 2008 à 12:26
merci ça marche mais juste un truc je me retrouve avec deux fichiers test.txt ensuite dans le dossier, cela n'écrase pas le précédent...
0
Emma > rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009
15 juil. 2008 à 15:51
un autre petit problème aussi, par exemple si je tape comme nombre 3.5, il m'affiche dans le fichier 3.500, est il possible d'éviter cela ?
0
rojina2903 Messages postés 96 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 5 juin 2009 13
15 juil. 2008 à 09:16
salut

merci jipicy

ça marche très bien

merci d'etre toujours là à nous aider sur CCM :)
0