[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 -
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:
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 :)
A voir également:
- Shell écrire dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Classic shell - Télécharger - Personnalisation
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.
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 :
Le résultat :
En bref il n'aime pas les caractères spéciaux.
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.
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.
Ç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).
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 :
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 :