niak Posted December 19, 2004 Posted December 19, 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 :)
theocrite Posted December 19, 2004 Posted December 19, 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
Sandeman Posted December 19, 2004 Posted December 19, 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
niak Posted December 19, 2004 Author Posted December 19, 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 :)
niak Posted December 20, 2004 Author Posted December 20, 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 :)
theocrite Posted December 20, 2004 Posted December 20, 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"
niak Posted December 20, 2004 Author Posted December 20, 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 ?
saintshakajin Posted December 20, 2004 Posted December 20, 2004 et les fonctions?!!? ça existe aussi en bash
theocrite Posted December 20, 2004 Posted December 20, 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 }
niak Posted December 26, 2004 Author Posted December 26, 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 ?
lorinc Posted December 26, 2004 Posted December 26, 2004 t'aurais pas pu la poser dans 100% question pour un pingouin... ça valait le coup.
theocrite Posted December 26, 2004 Posted December 26, 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.
saintshakajin Posted December 26, 2004 Posted December 26, 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.
miyamoto Posted December 26, 2004 Posted December 26, 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
lorinc Posted December 26, 2004 Posted December 26, 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:
miyamoto Posted December 26, 2004 Posted December 26, 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
theocrite Posted December 26, 2004 Posted December 26, 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
gauret Posted December 27, 2004 Posted December 27, 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.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.