[Script shell]Ecrire dans un fichier

Résolu
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   -
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
manque plus qu'une solution awk, et nous aurons la totale :-D
0
bezourox Messages postés 730 Date d'inscription   Statut Membre Dernière intervention   143
 
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 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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 730 Date d'inscription   Statut Membre Dernière intervention   143
 
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 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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 730 Date d'inscription   Statut Membre Dernière intervention   143
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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