|
|
|
|
guronsan, le jeudi 11 septembre 2003 à 15:02:49echo mon texte à ajouter >> monfichier.txt echo "un texte sur plusieurs lignes" >> monfichier.txt |
merci |
solutions :
-redirections (exemple de sebsauvage) -sed -awk -perl -vi (evite d'appeler un langage comme sed awk perl) |
Bonjour,
J'ai un peu le même problème d'éditoin de fichier via un script. En ce qui me concerne, je veux modifier tous les ";" (point virgules) de mon fichier par des "," (virgules). Si quelqu'un pouvait m'aider ce serait super. SVP Merci d'avance |
Lu,
je suis pas une bete de developpement linux mais il me semble qu il te faut utiliser la commande sed qui permet de faire ca. Essaye de regarder ss google si sed permet le remplacement de caractere. Bye |
Bonjour,
( echo ":1,\$s/;/,/g" echo "ZZ" ) |vi fichier >/dev/null 2>&1 L'expérience est une lanterne attachée dans notre dos, qui n'éclaire que le chemin parcouru. Confucius |
Hello,
très amusant d'utiliser vi Il y a des petits malins qui ont programmé les tours de Hanoï avec vi. CEPENDANT, c'est traire une puce avec des gants de boxe. sed -e 's/;/,/g' < monfic > monfic.$$ mv monfic.$$ monfic devrait suffire. Evidemment si il faut effectuer des manipulations complexes mais pas vraiment du développement vive le perl. <troll> c'est d'ailleurs sa seule utilité ..., pour le web Python et PHP sont tout de même plus lisibles </troll> Johan The software said "Requires Windows98, Win2000, or better, So I installed Unix. |
L'intérêt de vi est de ne pas avoir à passer par un fichier intermédiaire, ce qui provoque parfois la perte de caractères spéciaux.
L'expérience est une lanterne attachée dans notre dos, qui n'éclaire que le chemin parcouru. Confucius |
Bonjour!
Une question du même type, mais j'aimerai comprendre ce que je fais :p Comment remplacer "bonjour" par "#bonjour" sachant que je n'ai qu'un seul "bonjour" dans mon texte. J'avoue qu'avec les ,\$s/;/,/ et les autres, je suis perdu. Merci
|
Re-
Si tu veux juste enlever le dièse (#) de devant "coucou", un simple : then sed -e 's/#coucou/coucou/g' </tata/fichier> /tata/fichier.$$suffit. Si tu as la version "Gnu-sed" (3.2 et +) d'installée sur ton système, au lieu de passer par un fichier temporaire, tu peux éditer ton fichier directement avec le switch "-i" (in place) : sed -i.bak 's/#coucou/coucou/g' /tata/fichierle ".bak" créant automatiquement une copie du fichier original (fichier.bak). Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé.
|
sed '/toi/s/#coucou/coucou/'Le remplacement ne sera effectué que si la chaine "toi" est trouvée. ;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Bonjour, je souhaite, par des commandes script unix:
compter tout d'abord le nombre de lignes du fichier texte nommée "entree". puis modifier le 2e élément d'un fichier texte nommée "paramètre" pour le remplacer par le nombre trouvé. Est-ce que qqun pourrai m'aider plzzzzzz ps: le fichier paramètre se présente de la manière suivante: 4 5215 3 0.006 3 776 3 456 3 954 ici, remplacer 5215 par le nouveau nombre |
Salut, [tmpfs]$ cat entree Ligne n° 1 Ligne n° 2 Ligne n° 3 Ligne n° 4 Ligne n° 5 Ligne n° 6 Ligne n° 7 Ligne n° 8 Ligne n° 9 Ligne n° 10 [tmpfs]$ cat parametre 4 5215 3 0.006 3 776 3 456 3 954 [tmpfs]$ sed 's/.[^ ]*/ '"$(wc -l < entree)"'/2' parametre 4 10 3 0.006 3 776 3 456 3 954 [tmpfs]$Si tu as une version de "GNU sed", rajoute l'option "-i.BAK" pour modifier le fichier source et faire une copie de sauvegarde par la même occasion : sed -i.BAK 's/.[^ ]*/ '"$(wc -l < entree)"'/2' parametre;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Un grand merci jipsy, je suis etonné de voir la rapidité avec laquelle tu m'a répondu...
Cependant la ligne ne marche pas exactement comme prévu et lorsque je lance le script avec la ligne de commande: sed 's/.[^ ]*/ '"$(wc -l < entree)"'/2' parametre la console m'affiche: 4 $(wc -l < entree) 3 0.006 3 776 3 456 3 954 et le fichier texte paramètre n'est pas modifié alors qu'il devrait ressembler à ça: 4 476659 3 0.006 3 776 3 456 3 954 car il ya 476659 lignes dans mon fichier texte entree bizarre ?!? je t'avoue ke je suis une merde en script unix, je ne vois pas d'ou le probleme viens alors ke ca doit etre tout simple, tu a le droit de te moquer de moi.... |
Bon on va procéder autrement. var=$(wc -l < entree) sed -i.bak "s/.[^ ]*/ $var/2" parametreCe qui donne : [tmpfs]$ var=$(wc -l < entree) [tmpfs]$ echo $var 10 [tmpfs]$ cat parametre 4 5215 3 0.006 3 776 3 456 3 954 [tmpfs]$ sed -i.BAK "s/.[^ ]*/ $var/2" parametre [tmpfs]$ cat parametre 4 10 3 0.006 3 776 3 456 3 954 [tmpfs]$;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
console:
unknown flag i "parametre" pas modifié !? arf... |
Quelle version de sed (sed --version) ? Il faut le version Gnu sed (4.0.5 et supérieure)
Sinon passe par un fichier temporaire : var=$(wc -l < entree) sed "s/.[^ ]*/ $var/2" parametre > fich.tmp mv -f fich.tmp parametre;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
oui le fichier paramètre est modifié, mais de la manière suivante:
4 $(wc -l < entree) 3 0.006 3 776 3 456 3 954 pkoi $(wc -l < entree) ne donne pas le nombre de ligne de entree?!? |
Je me répète :
Quelle version de sed (sed --version) ? Quel shell ? Quelle version ? Ensuite que te renvoie : var=$(wc -l < entree) echo $var Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |