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

Shell et commandes GNU Discussion :

Shell - Modification fichier texte


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bahaaldine
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut Shell - Modification fichier texte
    Bonjour,

    J'ai un petit problème assez agaçant, en fait j'administre un serveur Apache, et je fais souvent la même modification dans le fichier php.ini.
    Je change le display_errors de 'on' à 'off' très souvent dans la console avec vi.
    C'est chiant parce qu'il faut parcourir le fichier changer le 'on' pour 'off', et quand on a fini on remet 'off' a la place de 'on'

    Je fais donc appel au linuxien, vieux, barbu, qui a les aisselles mouillées pour m'aider !
    Non je plaisante, en fait j'ai entendu parler de quelque chose du nom de awk qui permettait de faire la modification en une ligne de commande dans le shell.
    Je peux me tromper, donc je suis ouvert à toutes solutions, mais au final c'est ce que j'aimerai :

    faire la modification en une ligne de commande.

  2. #2
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Pas besoin de sortir de awk, un petit sed devrait suffire.

    Juste pour le fun, on peut le faire à la ed-like.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i '/^display_errors/{s/Off/On/i}' php.ini
    Bien entendu il faut mettre le chemin complet du fichier php.ini
    Et il faut échanger le "On" et le "Off" de la commande si tu veux passer le display_errors à Off.

    À partir de ça tu peux facilement faire un script shell qui effectue une ou l'autre des commandes selon si tu dois activer ou désactiver cette variable.

    Quelque chose de ce genre :
    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
    18
    19
    20
    21
    22
    23
    #!/bin/sh
     
    file="/etc/php4/apache/php.ini"
     
    if [ $# -eq 0 ];then
        echo "Usage $0 {On|Off}";
        exit 1;
    fi;
     
    case $1 in
        On|on|ON)
            sed -i '/^display_errors/{s/Off/On/i}' $file;
        ;;
     
        Off|off|OFF)
            sed -i '/^display_errors/{s/On/Off/i}' $file;
        ;;
     
        *)
            echo "Usage $0 {On|Off}";
            exit 1;
        ;;
    esac;
    Pas testé mais à priori ça devrait marcher.

    C'est faire le vieux barbus que d'utiliser ed ?

  3. #3
    Membre confirmé Avatar de bahaaldine
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    C'est curieux mais il me dit que l'option '-i' n'existe pas pour sed

    et quand j'essaye de mettre -e il me dit que c'est l'option s (entre les accolades qui ne fonctionne pas)

  4. #4
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    C'est parce que tu n'as pas un sed de qualité. Il faudrait enlever l'option -i et passer par un fichier temporaire ; modifier légèrement la syntaxe du bloc ; et enlever le flag i final...

    Ou alors, utiliser perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i -pe 's/^(display_errors\s+)On/\1Off/i'

  5. #5
    Membre confirmé Avatar de bahaaldine
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    Comment faire pour avoir un sed de qualité ?

  6. #6
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Utiliser gnu sed.

    Sur certains BSD, il est appelé "gsed".

  7. #7
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par bahaaldine Voir le message
    C'est curieux mais il me dit que l'option '-i' n'existe pas pour sed

    et quand j'essaye de mettre -e il me dit que c'est l'option s (entre les accolades qui ne fonctionne pas)

    le sed de GNU est mieux, mais pour ce que tu veux faire, le sed de base suffit largement :

    1) sélectionne la ligne contenant la chaîne 'display_errors'
    2) substitue Off par On

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed '/display_errors/s/Off/On/' php.ini >tmp_php.ini
    mv tmp_php.ini > php.ini

  8. #8
    Membre confirmé Avatar de bahaaldine
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    Merci beaucoup à tous ça mache très bien !

    et désolé d'avoir un sed qui pue

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

Discussions similaires

  1. [WD12] modification fichier texte
    Par cgr_007 dans le forum WinDev
    Réponses: 8
    Dernier message: 15/03/2010, 01h19
  2. Modification fichier Texte
    Par toutou2000 dans le forum C#
    Réponses: 11
    Dernier message: 26/02/2010, 11h03
  3. Modification fichier texte base de donnée
    Par usermap dans le forum C#
    Réponses: 2
    Dernier message: 16/04/2009, 21h28
  4. Réponses: 6
    Dernier message: 15/12/2006, 19h29

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