Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2007, 19h21   #1
Futur Membre du Club
 
Avatar de bahaaldine
 
Inscription : octobre 2006
Messages : 67
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2006
Messages : 67
Points : 18
Points : 18
Envoyer un message via MSN à bahaaldine
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.
bahaaldine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 11h30   #2
Membre émérite
 
Avatar de Celelibi
 
Inscription : janvier 2004
Messages : 990
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 990
Points : 822
Points : 822
Pas besoin de sortir de awk, un petit sed devrait suffire.

Juste pour le fun, on peut le faire à la ed-like.
Code :
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 :
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 ?
__________________
Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.
Celelibi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 11h51   #3
Futur Membre du Club
 
Avatar de bahaaldine
 
Inscription : octobre 2006
Messages : 67
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2006
Messages : 67
Points : 18
Points : 18
Envoyer un message via MSN à bahaaldine
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)
bahaaldine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 12h07   #4
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
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 :
perl -i -pe 's/^(display_errors\s+)On/\1Off/i'
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 12h19   #5
Futur Membre du Club
 
Avatar de bahaaldine
 
Inscription : octobre 2006
Messages : 67
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2006
Messages : 67
Points : 18
Points : 18
Envoyer un message via MSN à bahaaldine
Comment faire pour avoir un sed de qualité ?
bahaaldine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 12h21   #6
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Utiliser gnu sed.

Sur certains BSD, il est appelé "gsed".
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 13h16   #7
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
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 :
1
2
sed '/display_errors/s/Off/On/' php.ini >tmp_php.ini
mv tmp_php.ini > php.ini
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 13h24   #8
Futur Membre du Club
 
Avatar de bahaaldine
 
Inscription : octobre 2006
Messages : 67
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2006
Messages : 67
Points : 18
Points : 18
Envoyer un message via MSN à bahaaldine
Merci beaucoup à tous ça mache très bien !

et désolé d'avoir un sed qui pue
bahaaldine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h12.


 
 
 
 
Partenaires

Hébergement Web