IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Shell - Rechercher et remplacer dans un fichier


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Shell - Rechercher et remplacer dans un fichier
    Bonjour tout le monde,

    J'aimerai faire un script en shell qui me permette de modifier le contenu d'un fichier.
    Voici un exemple.
    J'ai un fichier qui contient entre autre :
    ....
    title Debian GNU/Linux, kernel 2.6.24-1-686
    root (hd0,1)
    kernel /boot/vmlinuz-2.6.24-1-686 root=/dev/hda2 ro
    initrd /boot/initrd.img-2.6.24-1-686

    title Debian GNU/Linux, kernel 2.6.24-1-686 (single-user mode)
    root (hd0,1)
    kernel /boot/vmlinuz-2.6.24-1-686 root=/dev/hda2 ro single
    initrd /boot/initrd.img-2.6.24-1-686

    title Debian GNU/Linux, kernel 2.6.22-3-686
    root (hd0,1)
    kernel /boot/vmlinuz-2.6.22-3-686 root=/dev/hda2 ro
    initrd /boot/initrd.img-2.6.22-3-686
    ....

    J'aimerai ajouter le contenu d'une même variable à la fin de toutes les lignes commancant par :
    "kernel /boot/vmlinuz......."

    Est ce que vous auriez une idée de comment faire ça ?
    Je pensais faire une boucle while pour lire chaque ligne de mon fichier mais je ne sais pas comme faire après.

    Merci d'avance pour votre aide.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    À chaud, je dirais tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/bash
     
    # chaîne à ajouter à la fin des directives "kernel" :
    VARIABLES="plop=gruik meuh=pouik"
     
    while read LINE
    do
         KEY=$(echo $LINE | cut -f 1 -d " ")
         VALUE=$(echo $LINE | cut -f 2- -d " ")
     
         if [ "$KEY" == "kernel" ]
         then
              echo "kernel $VALUE $VARIABLES"
         else
              echo "$LINE"
         fi
    done
    Utilisation (en suposant que leScript.sh contient le code ci-dessus) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cat /boot/grub/menu.lst | bash leScript.sh > menu2.lst
    # Vérifier que tout est okay pour ne pas foutre le bordel :
    vim menu2.lst
    # Ok, ça marche mais comme on est précautionneux, on fait un backup
    # histoire de pouvoir revenir en arrière in case of trouble :
    cp /boot/grub/menu.lst /boot/grub/menu.lst.bak
    # Allé, c'est parti, plus qu'à espérer que le système boote ;o)
    cat menu2.lst > /boot/grub/menu.lst
    Je n'ai pas testé par contre, mais ça devrait fonctionner ou donner un bon point de départ sur ton idée d'utiliser de la boucle while (il existe évidemment plein d'autre façon, style à coup de sed ou awk par exemple).

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Un petit coup de Perl pour faire la mise à jour sur place (avec un backup) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i.bak -pe 's/$/ gruik/ if m{^\s*kernel\s+/boot/vmlinuz}i' cheminFichier
    --
    Jedaï

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup à tous les deux.
    J'ai testé les deux solutions et elles fonctionnent parfaitement.
    Ça va me faire gagner beaucoup de temps.
    Encore un grand merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Rechercher et remplacer dans un fichier
    Par chatlumo dans le forum Langage
    Réponses: 4
    Dernier message: 09/10/2014, 05h00
  2. recherche et remplace dans un fichier
    Par magalou68 dans le forum VBScript
    Réponses: 5
    Dernier message: 21/06/2010, 19h20
  3. Réponses: 3
    Dernier message: 11/06/2009, 17h49
  4. Rechercher/Remplacer dans un fichier excel
    Par godmich dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/01/2008, 09h12
  5. Afficher, rechercher et remplacer dans un fichier
    Par lynal dans le forum Langage
    Réponses: 1
    Dernier message: 13/06/2006, 21h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo