View previous topic :: View next topic |
Author |
Message |
d2_racing Bodhisattva
Joined: 25 Apr 2005 Posts: 13047 Location: Ste-Foy,Canada
|
Posted: Sat Nov 03, 2007 12:54 am Post subject: [SED] Commande complexe. |
|
|
Salut tout le monde, je connais pas trop sed et j'aimerais savoir qu'est-ce qu'une commande comme celle-ci peut bien faire
Code: |
# sed -r -i -e "s/^APACHE2_OPTS=\"(.*)?\"$/APACHE2_OPTS=\"\\1 -D USERDIR\"/" /etc/conf.d/apache2
|
C'est quoi le but de cette commande ?
Merci ! |
|
Back to top |
|
|
d2_racing Bodhisattva
Joined: 25 Apr 2005 Posts: 13047 Location: Ste-Foy,Canada
|
Posted: Sat Nov 03, 2007 1:39 am Post subject: |
|
|
Ça ajoute une option :
Code: |
gentootux ~ # diff apache2.conf.bck apache2.conf
29c29
< APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D SUEXEC -D PHP5"
---
> APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D SUEXEC -D PHP5 -D USERDIR"
|
|
|
Back to top |
|
|
bouleetbil Guru
Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
|
Back to top |
|
|
Ezka Guru
Joined: 17 Feb 2005 Posts: 352 Location: par là, mais vraiment ...
|
Posted: Sat Nov 03, 2007 9:11 am Post subject: |
|
|
Propos d'apache, en local mon server emet à 100Ko/scd en http, alors que le nfs ou le ftp arrive à 600-800ko/scd (il est en wifi) ... il y a une expliquation que je ne connais pas, ou je commence à tester mon routeur _________________ Ez. |
|
Back to top |
|
|
cuicui Apprentice
Joined: 17 Dec 2004 Posts: 208
|
Posted: Sat Nov 03, 2007 6:33 pm Post subject: Re: [SED] Commande complexe. |
|
|
d2_racing wrote: | Salut tout le monde, je connais pas trop sed et j'aimerais savoir qu'est-ce qu'une commande comme celle-ci peut bien faire
Code: |
# sed -r -i -e "s/^APACHE2_OPTS=\"(.*)?\"$/APACHE2_OPTS=\"\\1 -D USERDIR\"/" /etc/conf.d/apache2
|
C'est quoi le but de cette commande ? |
Puisque tu ne connais pas trop sed, c'est p'tête le moment de mettre un peu les mains dedans
Dans le détail: l'option -i (inject?) dit à sed de travailler directement sur le fichier, avec cette option il faut être sur de son coup car il n'y a pas de sauvegarde. L'option -r dit qu'il faut utiliser les expression régulières étendues, on peut s'en passer (cf. plus bas) . L'option -e précise que ce qui suit les options est le script (cette option est surtout utile si on mets plusieurs scripts à la queleuleu sed -e "s/aaa/bbb/" -e "s/ccc/ddd/" ...).
Du côté du script c'est assez simple: s/BLABLA/BLEBLE/ on substitue BLABLA par BLEBLE où BLABLA est une chaine de caractères commençant ^ part APACHE2_OPTS=" suivi d'un certain nombre de caractères (.*)? et se terminant $ par "
On substitue cette ligne avec la même chose au début, puis on "colle" un certain nombre de caractères avec \1 et on rajoute derrière -D USERDIR sans oublier le " à la fin.
Si on n'utilise pas les expressions régulières étendues c'est un peut différent, ça donnerait:
Code: | # sed -i -e "s/^APACHE2_OPTS=\"\(.*\)\"$/APACHE2_OPTS=\"\1 -D USERDIR\"/" /etc/conf.d/apache2 |
La différence c'est qu'un certain nombre de caractères est "matché" par \(.*\) et non plus (.*)? et que dans la substitution est n'est pas nécessaire de protéger \1 par un antislash.
En résumé: avec sed il est possible de "matcher" une ou plusieurs chaines de caractères et des les "coller" dans la substitution grâce à \1, \2, etc. Attention, on est limité à 9 variables car \10 signifie "\1 suivit de zéro".
D'ailleurs on aurait pu peut pousser le concept un peu plus loin et "matcher" le début de la ligne APACHE2_OPTS=" dans une variable:
Code: | sed -r -e -i "s/^(APACHE2_OPTS=\")(.*)?\"$/\\1\\2 -D USERDIR\"/" /etc/conf.d/apache2 |
(devoir maison: faire la même chose sans l'option -r ) |
|
Back to top |
|
|
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Sat Nov 03, 2007 8:09 pm Post subject: |
|
|
Très sympa ta contribution cuicui (j'ai été trop fainéant pour la faire ). Juste une petite correction : ^ et $ n'indiquent pas le début et le fin d'une "chaîne de caractère" mais le début et la fin d'une ligne du fichier en entrée. On peut noter que ces deux mêmes caractères signifient la même chose avec grep (qui est nettement plus simple à utiliser mais se restreint à la sélection de lignes dans un fichier). |
|
Back to top |
|
|
d2_racing Bodhisattva
Joined: 25 Apr 2005 Posts: 13047 Location: Ste-Foy,Canada
|
Posted: Sat Nov 03, 2007 8:33 pm Post subject: |
|
|
Merci cuicui, moi pour savoir ce qu'il c'est passé j'ai fait un diff...je vais devoir apprendre cette commande,car elle est trop forte |
|
Back to top |
|
|
|