[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 34620 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 34620 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:
Fichier B:
Je veux en résultat que mon fichier A contienne :
Tout simplement intégrer des lignes de code à l'intérieur d'un fichier de code :)
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 :)
3 réponses
-
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
-
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 $
;-))
-
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.-
-
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>
-
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. -
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 : -
-