[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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 8 avril 2011 à 17:50
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 8 avril 2011 à 17:50
A voir également:
- Shell écrire dans un fichier
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
3 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
7 avril 2011 à 12:14
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.
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
7 avril 2011 à 12:41
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 $
;-))
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
7 avril 2011 à 14:38
7 avril 2011 à 14:38
manque plus qu'une solution awk, et nous aurons la totale :-D
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
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 :
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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
7 avril 2011 à 16:13
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 ?
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
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.
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>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
7 avril 2011 à 16:35
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.
Ç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.
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
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).
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 :
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
7 avril 2011 à 16:57
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.
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.