[Script shell]Ecrire dans un fichier

Résolu/Fermé
bezourox Messages postés 729 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 19 janvier 2013 - 7 avril 2011 à 12:09
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 8 avril 2011 à 17:50
Bonjour,

Voilà je cherche à écrire le contenu d'un fichier dans un autre fichier, mais à un endroit bien précis.

Exemple :

Fichier A:
blablabla
blabla
blablablabla
####
blablabla


Fichier B:
coucou
salut


Je veux en résultat que mon fichier A contienne :
blablabla
blabla
blablablabla
####
coucou
salut
blablabla


Tout simplement intégrer des lignes de code à l'intérieur d'un fichier de code :)
A voir également:

3 réponses

Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
7 avril 2011 à 12:14
Salut.
Je ne sais pas comment faire exactement, mais je peut te donner une méthode :
avec grep tu repères la ligne (cherche la bonne option) puis avec head et tail tu concatène le tout.
a=$(grep "####" [bonne option] fichier_A)
head -n $a fichier_A>resu
cat fichier_B>>resu
(( a++ ))
tail -n +$a fichier_A>>resu
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568
7 avril 2011 à 12:41
Salut,

$ cat A
blablabla
blabla
blablablabla
####
blablabla

$ cat B
coucou
salut

$ sed -i.bak '/####/r B' A

$ cat A
blablabla
blabla
blablablabla
####
coucou
salut
blablabla

$

;-))
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
7 avril 2011 à 14:38
manque plus qu'une solution awk, et nous aurons la totale :-D
0
bezourox Messages postés 729 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 19 janvier 2013 143
7 avril 2011 à 15:41
OK, merci pour ça, c'est un début, mais avec les explications, ça serait super.
Car ce que je dois faire va plus loin.

De plus, voilà mon test :

sed -i.bak '22:cd_vm/r 23:cd_coucou' /usr/share/config.txt


Le résultat :

sed: -e expression n=°1, caractère 3: : n'a besoin d'aucune adresse


En bref il n'aime pas les caractères spéciaux.
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568
7 avril 2011 à 16:13
Bon, le mieux serait peut être que tu nous montres à quoi ressemble tes fichiers et ce que tu veux y changer, non ?
0
bezourox Messages postés 729 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 19 janvier 2013 143
7 avril 2011 à 16:19
Oui ça pas de problème, à récupérer un code qui marche, j'aime aussi comprendre les commandes.
le fichier de base est en dessous.
Le texte en gras est celui que je cherche à importer.

<ORDER>
0:cd_processors
1:cd_memories
2:cd_storages
3:cd_drives
4:cd_videos
5:cd_sounds
6:cd_networks
7:cd_controllers
8:cd_slots
9:cd_ports
10:cd_admininfo
11:cd_comments
12:cd_configuration
13:cd_bios
14:cd_softwares
15:cd_packets
16:cd_registry
17:cd_monitors
18:cd_inputs
19:cd_printers
20:cd_modems
21:cd_mobile
22:cd_vm
23:cd_officepack
</ORDER>

<LBL>
cd_admininfo:g(56)
cd_comments:Notes
cd_bios:g(273)
cd_configuration:g(500)
cd_controllers:g(93)
cd_drives:g(92)
cd_inputs:g(91)
cd_memories:g(26)
cd_mobile:g(994)
cd_modems:g(270)
cd_monitors:g(97)
cd_networks:g(82)
cd_packets:g(512)
cd_ports:g(272)
cd_printers:g(79)
cd_processors:g(54)
cd_registry:g(211)
cd_slots:g(271)
cd_softwares:g(20)
cd_sounds:g(96)
cd_storages:g(63)
cd_videos:g(61)
cd_vm:g(1266)
cd_officepack:cd_officepack
</LBL>

<ISAVAIL>
cd_admininfo:accountinfo
cd_bios:bios
cd_controllers:controllers
cd_drives:drives
cd_inputs:inputs
cd_memories:memories
cd_mobile:javainfo
cd_modems:modems
cd_monitors:monitors
cd_networks:networks
cd_packets:download_history
cd_ports:ports
cd_printers:printers
cd_registry:registry
cd_slots:slots
cd_softwares:softwares
cd_sounds:sounds
cd_storages:storages
cd_videos:videos
cd_vm:virtualmachines
cd_officepack:cd_officepack
</ISAVAIL>

<URL>
cd_processors
cd_memories:1
cd_storages:2
cd_videos:4
cd_sounds:5
cd_networks:6
cd_controllers:7
cd_slots:8
cd_admininfo:10
cd_comments:11
cd_configuration:12
cd_bios:13
cd_softwares:14
cd_packets:15
cd_registry:16
cd_monitors:17
cd_inputs:18
cd_printers:19
cd_mobile:21
cd_vm:22
cd_officepack:23
</URL>
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568
7 avril 2011 à 16:35
Euh... je n'ai pas tout pigé là ;-(

Ça c'est le fichier de base ?
Il faut importer un truc après les lignes en gras ?

Sinon pour l'explication de la commande avec sed :

sed -i.bak
L'option "-i" (in-place) permet d'éditer le fichier original en live. Le ".bak" permet de faire une copie de l'original


/####/
Le motif de recherche est placé entre des slashs.


r B
La commande "r fichier" permet de lire le contenu d'un fichier et de l'ajouter à la suite du motif fourni.
0
bezourox Messages postés 729 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 19 janvier 2013 143
7 avril 2011 à 16:45
OK super merci pour ces explications.
Peut on faire la même chose, mais sans utiliser un deuxième fichier ?

Dans mon post précédent, on retrouve le fichier final avec en gras les lignes qui n'y sont pas au départ (qui doivent être ajoutées via le script).

sed -i.bak '22:cd_vm/r 23:cd_coucou' /usr/share/config.txt


Avec cette commande, je pensais mettre en dessous de la ligne qui contient 22:cd_vm la ligne 23:cd_coucou

La commande ne marche pas, visiblement sed bloque sur les :
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
7 avril 2011 à 16:57
Il n'est pas impossible que ":" soit un caractère spécial. Il faut alors l'échappé. essai en écrivant :
22\:cd_vm.
D'après ce que dit zipe31, "r" dans sed serd à insérer un fichier. Dans ton cas, il va chercher un fichier 23:cd_coucou.
regarde la documentation de sed.
0