[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   -
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 :)

3 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      manque plus qu'une solution awk, et nous aurons la totale :-D
      0
  3. 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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Bon, le mieux serait peut être que tu nous montres à quoi ressemble tes fichiers et ce que tu veux y changer, non ?
      0
    2. 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
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    4. 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
    5. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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