Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2007, 01h05   #1
Futur Membre du Club
 
Inscription : janvier 2006
Messages : 65
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 65
Points : 18
Points : 18
Par défaut Ecrire dans un fichier en bash

J'ai un problème:

J'ai un fichier source MonScript.xba qui contient le code suivant:

Code :
1
2
3
4
5
6
7
<script:module>
 
Sub Main
 
End Sub
 
</script:module>
J'ai besoin d'ajouter dans ce fichier, avant la dernière ligne(</script:module>), le contenu(total) d'un autre fichier texte.

Je ne sais comment faire!

Je vous remercie par avance de l'aide que vous pourrez m'apporter.

Vincent
Prodige2020 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 10h41   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 776
Points : 7 776
Code :
1
2
3
4
5
 
nombredelignes=$(wc -l toto.xba | cut -d" " -f1)
head -$(expr $nombredelignes - 1) fichier.xba > fichierdestination
cat fichieraacjouter >> fichierdestination
tail -1 fichier.xba >> fichierdestination
voila le principe pour bien comprendre la methode

bien sur tu peux eviter tout ca en generant un sed ou un vi ou un awk.

mais ca te donne les etapes a faire faire a une commande sed,vi ou awk.

tu peux aussi bien sur utiliser tel que mais ca fait 1fichier intermediaire (fichierdestination) au lieu d'ecrire directement dans ton xba.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 12h07   #3
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par Prodige2020
Code :
1
2
3
4
5
6
7
<script:module>
 
Sub Main
 
End Sub
 
</script:module>

Si la chaîne "End Sub" est présente une seule fois dans ton script,
la solution suivante peut convenir
http://pwet.fr/man/linux/commandes/sed

Fichier inclusion.txt :

sed '/^End Sub/r inclusion.txt' MonScript.xba > MonScript2.xba



MonScript2.xba :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<script:module>

Sub Main

End Sub
l1
l2
l3
l4
l5
</script:module>
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 13h53   #4
Futur Membre du Club
 
Inscription : janvier 2006
Messages : 65
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 65
Points : 18
Points : 18
Merci à vous 2 pour vos réponses.
frp31:je vais essayer ce soir la méthode proposée et je te dis quoi
BlaireauOne:je n'ai qu'un end sub pr le moment ms j'en aurais plus par la suite
Prodige2020 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 18h02   #5
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Avec awk :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
/<\/script:module>/{
                ligne=$0
                i=0
                while ( getline < "fichier_a_inclure.txt" != EOF )
                {
                        print $0
                }
             close("fichier_a_inclure.txt");    
             print ligne
            }
{
        print $0
}
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 19h52   #6
Futur Membre du Club
 
Inscription : janvier 2006
Messages : 65
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 65
Points : 18
Points : 18
Merci à toi becket.

Par contre je ne comprends pas vraiment.
La commande awk n'apparait nulle part?
Le fichier .xba n'apparait nulle part?
Pourrais tu m'expliquer un peu le script parceque je ne comprends pas grand chose STP.

Merci d'avance.

PS: Désolé je débute en bash...
Prodige2020 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 21h49   #7
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par Prodige2020
Merci à vous 2 pour vos réponses.
frp31:je vais essayer ce soir la méthode proposée et je te dis quoi
BlaireauOne:je n'ai qu'un end sub pr le moment ms j'en aurais plus par la suite

Inclusion après l'avant dernière ligne

((AvantDernierEnreg=$(wc -l < MonScript.xba) - 1))

sed "${AvantDernierEnreg}r inclusion.txt" MonScript.xba > resultat.txt
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 22h05   #8
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Citation:
Envoyé par becket
Avec awk :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
/<\/script:module>/{
                ligne=$0
                i=0
                while ( getline < "fichier_a_inclure.txt" != EOF )
                {
                        print $0
                }
             close("fichier_a_inclure.txt");    
             print ligne
            }
{
        print $0
}

Petite explication

awk permet de scripte pas mal de chose, j'ai noté ici uniquement le script. Voici comment utiliser le script en question ( fichier_script.awk contient les commande notée plus haut )

awk -f fichier_script.awk fichier_a_traiter.txt

awk lis le fichier_a_traiter.txt ligne par ligne

1- si la ligne contient <\/script:module>
- Alors copie la ligne dans une variable $ligne
- Ouvre le fichier fichier_a_inclure.txt et affiche toutes les lignes jusqu'a la fin du fichier à inclure
- Affiche la ligne recopier dans la variable $ligne
2 - Sinon affiche la ligne


Simple, non ?
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 22h40   #9
Futur Membre du Club
 
Inscription : janvier 2006
Messages : 65
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 65
Points : 18
Points : 18
Par défaut Ok

Merci becket,ça marche trés bien.

Merci de m'avoir apporté votre aide

Vincent
Prodige2020 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h34.


 
 
 
 
Partenaires

Hébergement Web