Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SED] Commande complexe.
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
d2_racing
Bodhisattva
Bodhisattva


Joined: 25 Apr 2005
Posts: 13047
Location: Ste-Foy,Canada

PostPosted: Sat Nov 03, 2007 12:54 am    Post subject: [SED] Commande complexe. Reply with quote

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
View user's profile Send private message
d2_racing
Bodhisattva
Bodhisattva


Joined: 25 Apr 2005
Posts: 13047
Location: Ste-Foy,Canada

PostPosted: Sat Nov 03, 2007 1:39 am    Post subject: Reply with quote

Ç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
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sat Nov 03, 2007 9:04 am    Post subject: Reply with quote

Pour le mod userdir qui permet aux utilisateurs d'avoir un site web dans leur home
https://forums.gentoo.org/viewtopic-t-602519-highlight-apache+conf+userdir.html
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
Ezka
Guru
Guru


Joined: 17 Feb 2005
Posts: 352
Location: par là, mais vraiment ...

PostPosted: Sat Nov 03, 2007 9:11 am    Post subject: Reply with quote

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 :?: :arrow:
_________________
Ez.
Back to top
View user's profile Send private message
cuicui
Apprentice
Apprentice


Joined: 17 Dec 2004
Posts: 208

PostPosted: Sat Nov 03, 2007 6:33 pm    Post subject: Re: [SED] Commande complexe. Reply with quote

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
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1912
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Sat Nov 03, 2007 8:09 pm    Post subject: Reply with quote

Très sympa ta contribution cuicui (j'ai été trop fainéant pour la faire :oops: ). 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
View user's profile Send private message
d2_racing
Bodhisattva
Bodhisattva


Joined: 25 Apr 2005
Posts: 13047
Location: Ste-Foy,Canada

PostPosted: Sat Nov 03, 2007 8:33 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum