niak Posté(e) le 19 décembre 2004 Partager Posté(e) le 19 décembre 2004 lu tlm, voila a l aide d un script j aimera remplacer 2 petites lignes existantes déja dans un fichier. si je fais un : mon texte blabla >> /home/niak/texte.txt via un script, ca va bien m enregistrer le texte blabla dans texte.txt, mais comment faire pour ecrire le texte blabla sur la ligne 37 par exemple.. via un script, comment faire pour modifier la ligne 38 par exemple ? merci d avance de votre aide :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
-rem- Posté(e) le 19 décembre 2004 Partager Posté(e) le 19 décembre 2004 Perl est ton ami. man perlfunc Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 19 décembre 2004 Partager Posté(e) le 19 décembre 2004 Fichier mymodify.sh : #! /bin/sh if [ ! -f $1 ] then echo "File $1 not found" exit 0; fi NBLINES=`cat $1|wc -l` head -$(($2-1)) $1 > /tmp/mymodify.tmp echo $3 >> /tmp/mymodify.tmp tail -$(($NBLINES-$2)) $1 >> /tmp/mymodify.tmp mv -f /tmp/mymodify.tmp $1 theo@fermat:~/test$ cat > sample_file << EOF > 1 buzz > 2 rex > 3 bo > 4 nothing > 5 hamm > slink > potato > EOF theo@fermat:~/test$ ./mymodify.sh sample_file 4 "etch is the next" theo@fermat:~/test$ cat sample_file 1 buzz 2 rex 3 bo etch is the next 5 hamm slink potato theo@fermat:~/test$ Command line powwa Comment ça c'est bourrin ? J'ai quand même le droit à un point pour question pour un pingouin, non Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 19 décembre 2004 Partager Posté(e) le 19 décembre 2004 bah sinon tu écris la commande vi correspondante, commençant par un :38 (pour aller ligne 28), et tu lance vi en mode batch sur ton fichier... j'ai plus la commande en tête mais man vi est ton ami Lien vers le commentaire Partager sur d’autres sites More sharing options...
niak Posté(e) le 19 décembre 2004 Auteur Partager Posté(e) le 19 décembre 2004 Fichier mymodify.sh :CODE #! /bin/sh if [ ! -f $1 ] then echo "File $1 not found" exit 0; fi NBLINES=`cat $1|wc -l` head -$(($2-1)) $1 > /tmp/mymodify.tmp echo $3 >> /tmp/mymodify.tmp tail -$(($NBLINES-$2)) $1 >> /tmp/mymodify.tmp mv -f /tmp/mymodify.tmp $1 CODE theo@fermat:~/test$ cat > sample_file << EOF > 1 buzz > 2 rex > 3 bo > 4 nothing > 5 hamm > slink > potato > EOF theo@fermat:~/test$ ./mymodify.sh sample_file 4 "etch is the next" theo@fermat:~/test$ cat sample_file 1 buzz 2 rex 3 bo etch is the next 5 hamm slink potato theo@fermat:~/test$ Command line powwa icon_mrgreen.gif Comment ça c'est bourrin ? J'ai quand même le droit à un point pour question pour un pingouin, non transpi.gif ok , et par exemple comment pourrai je inserer ce script et cette commande dans un script automatisée permettant d installer un logiciell par exemple; c est a dire executer le fichier mymodify.sh dans un autre script , et lancer la commande dans ce script. merci d avance de votre aide :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 19 décembre 2004 Partager Posté(e) le 19 décembre 2004 Tu peux préciser ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
niak Posté(e) le 20 décembre 2004 Auteur Partager Posté(e) le 20 décembre 2004 exemple : pour automatiser l install d apache, je cree un fichier install_auto avec dedans : apt-get install phpmyadmin apt-get install apache apt-get php4 dpkg-reconfigure apache ...... ...... ....... et la pour remplacer par ex. les variable <Directory Index .php .html> etc.. par celle ques je veux, j aimerai que dans ce script et bien ca remplace directment ma ligne souhaité par le texte que j'aurai renseigné ! j espere avoir été clair, merci de l aide :) ps : bie sur je peux tjs faire un DirectoryIndex index.html ...... >> /etc/apache/httpd.conf, mais ca me met des lignes en plus et repettes dans l httpd.conf ! d ou l interet de modifier laligne x :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 20 décembre 2004 Partager Posté(e) le 20 décembre 2004 ps : bie sur je peux tjs faire un DirectoryIndex index.html ...... >> /etc/apache/httpd.conf, mais ca me met des lignes en plus et repettes dans l httpd.conf ! d ou l interet de modifier laligne x :) mymodify.sh /etc/apache/httpd.conf X "DirectoryIndex index.html" Lien vers le commentaire Partager sur d’autres sites More sharing options...
niak Posté(e) le 20 décembre 2004 Auteur Partager Posté(e) le 20 décembre 2004 mymodify.sh /etc/apache/httpd.conf X "DirectoryIndex index.html" hum...mais cela implique qu il me faut un fichier modify.sh a coté de mon script auto.sh .... comment integrer le script present dans modify.sh dans le fichier auto.sh en fait ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
saintshakajin Posté(e) le 20 décembre 2004 Partager Posté(e) le 20 décembre 2004 et les fonctions?!!? ça existe aussi en bash Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 20 décembre 2004 Partager Posté(e) le 20 décembre 2004 saintshakajin : #! /bin/sh function mymodify { if [ ! -f $1 ] then echo "File $1 not found" exit 0; fi NBLINES=`cat $1|wc -l` head -$(($2-1)) $1 > /tmp/mymodify.tmp echo $3 >> /tmp/mymodify.tmp tail -$(($NBLINES-$2)) $1 >> /tmp/mymodify.tmp mv -f /tmp/mymodify.tmp $1 } Lien vers le commentaire Partager sur d’autres sites More sharing options...
niak Posté(e) le 26 décembre 2004 Auteur Partager Posté(e) le 26 décembre 2004 hum, docn theocrite, je dois mettre dans mon script auto.sh, par ex apres les aptitude apache etc..., ce code de la facon suivante ? : #! /bin/sh apt-get install apache apt-get install mysql ....... ........ function mymodify { if [ ! -f $1 ] then echo "File $1 not found" exit 0; fi NBLINES=`cat $1|wc -l` head -$(($2-1)) $1 > /tmp/mymodify.tmp echo $3 >> /tmp/mymodify.tmp tail -$(($NBLINES-$2)) $1 >> /tmp/mymodify.tmp mv -f /tmp/mymodify.tmp $1 } mymodify /etc/apache/httpd.conf X "DirectoryIndex index.html" c est bien comme ca ou bien ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 26 décembre 2004 Partager Posté(e) le 26 décembre 2004 t'aurais pas pu la poser dans 100% question pour un pingouin... ça valait le coup. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 26 décembre 2004 Partager Posté(e) le 26 décembre 2004 C'est clair niak : J'ai qu'un 56K sous la main. Il me semble que le passage d'argument ne fonctionne pas comme ça. Au pire, tu fais deux scripts qui s'appellent, c'est pas la mort. Sinon fait moi un up dans deux-trois jours, j'aurais un shell sous la main et mes scripts perso. Lien vers le commentaire Partager sur d’autres sites More sharing options...
saintshakajin Posté(e) le 26 décembre 2004 Partager Posté(e) le 26 décembre 2004 oui et non, moi je mettrai déjà une vérification pour savoir si apache est installé ou non. Et autre chose, je mettrai plutôt APT=`which apt-get` Pour une question de lisibilité et d'esthétique, je mettrais la fonction en début de script et pas au milieu. Lien vers le commentaire Partager sur d’autres sites More sharing options...
miyamoto Posté(e) le 26 décembre 2004 Partager Posté(e) le 26 décembre 2004 moi dans ton cas, je ferais plutot un truc de ce genre là : cat fichier.conf | sed 's/chaine_a_remplacer/chaine_qui_remplace/' > fichier.tmp mv fichier.tmp fichier.conf comme ça le jour où y'a une modification dans le fichier de conf basique et que tous les numéros de ligne ont changé tu évites le boxon Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 26 décembre 2004 Partager Posté(e) le 26 décembre 2004 pour le coup du sed, j'ai hésité, puis je me suis dit que les gens n'aiment pas sed en genéral... :copain: Lien vers le commentaire Partager sur d’autres sites More sharing options...
miyamoto Posté(e) le 26 décembre 2004 Partager Posté(e) le 26 décembre 2004 Ben disons que la pérennité du script me semble plus assurée ainsi qu'en jouant avec les numéros de ligne, mais bon chacun fait ce qu'il veut Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 26 décembre 2004 Partager Posté(e) le 26 décembre 2004 Ben c'est clair qu'il y a le choix entre sed, vim, awk, bash, perl etc... Mais moi je ne connais que bash et vi, mais je ne sais pas me servir du dernier pour du traitement automatisé, mais il y a certainement des meilleures façons de faire. EDIT : Quand je parle de Bash, c'est pour désigner par abus de language les scripts shell. Les autres ferons aussi bien l'affaire. Pas la peine de répondre que tsch ou zsh c'est meilleur Lien vers le commentaire Partager sur d’autres sites More sharing options...
gauret Posté(e) le 27 décembre 2004 Partager Posté(e) le 27 décembre 2004 Puisqu'on parle de perl pour faire du remplacement automatisé, voilà un petit lien bien intéressant : http://articles.mongueurs.net/magazines/linuxmag50.html J'aime pas trop perl en général, mais pour ça il faut dire que c'est pratique. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.