OVH Cloud OVH Cloud

sed - remplacement ligne commentaire

19 réponses
Avatar
Rakotomandimby (R12y) Mihamina
Bonjour

J'ai un serveur web dont le fichier de configuration est abondament
commenté.

Maintenant que j'ai compris toutes les options, je souhaiterai faire
mumuse avec pour peauffiner.

Il serait bon que je puisse naviguer dans ce fichier le plus rapidement
possible et avoir une vue globale la plus confortable.

Les commentaires me sont maintenant inutiles. Au pire, je peux me baser
sur un fichier sample à coté.

Les commentaires sont les lignes qui commencent par "#".

Si je fais un

sed 's,#.*,,g' /home/mihamina/web/etc/zope.conf | sed '/^$/d'


J'ai eu des lignes blanches à la place des commentaires. C'est bien, mais
c'était trop aéré. Des lignes blanches, c'est encore moins utile que
des commentaires... J'ai un peu cherché, c'est comme ça que j'ai trouvé
un moyen de remplacer les commentaires par "vraiment rien".

Y-a-t-il mieux?

PS: J'utilise ZSH au cas ou ça peut me faciliter encore plus la tache...

Merci d'avance.

--
Mirroir de logiciels libres http://www.etud-orleans.fr
Développement de logiciels libres http://aspo.rktmb.org/activites/developpement
Infogerance de serveur dédié http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

10 réponses

1 2
Avatar
Jacques L'helgoualc'h
Le 06-06-2005, Rakotomandimby (R12y) Mihamina a écrit :
Bonjour


bonjour,

J'ai un serveur web dont le fichier de configuration est abondament
commenté.
[...]

Si je fais un

sed 's,#.*,,g' /home/mihamina/web/etc/zope.conf | sed '/^$/d'
[...]

Y-a-t-il mieux?


sed -e '/^[[:space:]]*($|#)/d' <zope_blabla.conf >zope.conf

Merci d'avance.


de rien,
--
Jacques L'helgoualc'h

Avatar
TiChou
Dans le message <news:,
*Rakotomandimby (R12y) Mihamina* tapota sur f.c.o.unix :

Bonjour


Salut,

[suppression des commentaires]

sed 's,#.*,,g' /home/mihamina/web/etc/zope.conf | sed '/^$/d'

J'ai eu des lignes blanches à la place des commentaires. C'est bien, mais
c'était trop aéré. Des lignes blanches, c'est encore moins utile que
des commentaires... J'ai un peu cherché, c'est comme ça que j'ai trouvé
un moyen de remplacer les commentaires par "vraiment rien".

Y-a-t-il mieux?


$ sed '/^(#|$)/d' fichier

ou

$ grep -v '^(#|$)' fichier

Merci d'avance.


De rien.

--
TiChou

Avatar
Jacques L'helgoualc'h
Le 06-06-2005, Rakotomandimby (R12y) Mihamina a écrit :
Bonjour


bonjour,

J'ai un serveur web dont le fichier de configuration est abondament
commenté.
[...]

Si je fais un

sed 's,#.*,,g' /home/mihamina/web/etc/zope.conf | sed '/^$/d'
[...]

Y-a-t-il mieux?


sed -e '/^[[:space:]]*($|#)/d' <zope_blabla.conf >zope.conf

Ton s,#.*,,g pourrait couper un # entre quotes, par exemple (et le g est
inutile).

Merci d'avance.


de rien,
--
Jacques L'helgoualc'h

Avatar
Alain
On Mon, 06 Jun 2005 21:00:30 +0200
Rakotomandimby (R12y) Mihamina wrote:

[...]
|> Les commentaires me sont maintenant inutiles. Au pire, je peux me baser
|> sur un fichier sample à coté.
|>
|> Les commentaires sont les lignes qui commencent par "#".
|>
|> Si je fais un
|>
|> sed 's,#.*,,g' /home/mihamina/web/etc/zope.conf | sed '/^$/d'

sed '/^#/d' /home/mihamina/web/etc/zope.conf

--
Alain
Avatar
Benoit Izac
Bonjour,

le 06/06/2005 à 21:00, Rakotomandimby Mihamina a écrit
dans le message :

Les commentaires sont les lignes qui commencent par "#".

Si je fais un

sed 's,#.*,,g' /home/mihamina/web/etc/zope.conf | sed '/^$/d'


Si tu veux le même comportement (supprimer tous les commentaires, même
ceux en bout de ligne) :
sed -e 's/[[:space:]]*#.*$//' fichier | grep -v '^[[:space:]]*$'
ou
perl -ne 's/s*#.*//; print if !/^s*$/' fichier


Pour simplement supprimer les lignes vides et celles où il n'y a que des
commentaires :
grep -vE '^[[:space:]]*(#|$)' fichier

Si tu ne veux pas utiliser les EREs (Extended Regular Expressions), tu
dois le faire en 2 fois car il n'y a pas de ``|'' en BRE (Basic Regular
Expressions) :
grep -v '^[[:space:]]*#' fichier | grep -v '^[[:space:]]*$'

--
Benoit Izac

Avatar
Jacques L'helgoualc'h
Le 06-06-2005, Benoit Izac a écrit :
Bonjour,


bonjour,

[...]
Si tu ne veux pas utiliser les EREs (Extended Regular Expressions), tu
dois le faire en 2 fois car il n'y a pas de ``|'' en BRE (Basic Regular
Expressions) :
grep -v '^[[:space:]]*#' fichier | grep -v '^[[:space:]]*$'


ça dépend du grep, alors :

$ echo 'toto
tata
tutu' | grep -v 'a|u'
toto
$ grep --version
grep (grep de GNU) 2.5.1


Dans l'autre sens, si taper des provoque des crampes, Gnu sed offre
l'option -r pour écrire (A|B) au lieu de (A|B) ...
--
Jacques L'helgoualc'h

Avatar
Antoine Leca
En <news:slrndaap0d.1l7.lhh+,
Jacques L'helgoualc'h va escriure:
il n'y a pas de ``|'' en BRE (Basic Regular Expressions) :


ça dépend du grep, alors :


| dans les expressions régulières « à la ed/grep/sed » est une extension
GNU ; je ne sais pas si cela se marrie bien avec les flashbacks (1 .. 9),
quand tu as des sous-expressions des deux côtés du |.

Cf. par exemple
http://www.freebsd.org/cgi/man.cgi?query=re_format&manpath=FreeBSD+5.4-RELEASE
(à la fin, à propos des e.r. « obsolètes »).


Dans l'autre sens, si taper des provoque des crampes, Gnu sed
offre l'option -r pour écrire (A|B) au lieu de (A|B) ...


On trouve aussi -E (FreeBSD).


Antoine


Avatar
Jacques L'helgoualc'h
Le 07-06-2005, Antoine Leca a écrit :
En <news:slrndaap0d.1l7.lhh+,
Jacques L'helgoualc'h va escriure:
il n'y a pas de ``|'' en BRE (Basic Regular Expressions) :


ça dépend du grep, alors :


| dans les expressions régulières « à la ed/grep/sed » est une extension
GNU ; je ne sais pas si cela se marrie bien avec les flashbacks (1 .. 9),
quand tu as des sous-expressions des deux côtés du |.


Qqch comme ça ?

$ echo _Toto_ |
sed 's,.(ta(ta)|(To)(to)|(ti)ti).,0: 1:1 2:2 3:3 4:4 5:5,'
0:_Toto_ 1:Toto 2: 3:To 4:to 5:

Cf. par exemple
http://www.freebsd.org/cgi/man.cgi?query=re_format&manpath=FreeBSD+5.4-RELEASE
(à la fin, à propos des e.r. « obsolètes »).


Merci.

Dans l'autre sens, si taper des provoque des crampes, Gnu sed
offre l'option -r pour écrire (A|B) au lieu de (A|B) ...


On trouve aussi -E (FreeBSD).


au moins c'est cohérent avec Grep ...
--
Jacques L'helgoualc'h



Avatar
Antoine Leca
En <news:slrndab9k4.4bl.lhh+,
Jacques L'helgoualc'h va escriure:
| dans les expressions régulières « à la ed/grep/sed » est une
extension GNU ; je ne sais pas si cela se marrie bien avec les
flashbacks (1 .. 9), quand tu as des sous-expressions des
deux côtés du |.


Qqch comme ça ?

$ echo _Toto_ |
sed 's,.(ta(ta)|(To)(to)|(ti)ti).,0: 1:1 2:2 3:3
4:4 5:5,' 0:_Toto_ 1:Toto 2: 3:To 4:to 5:


J'avais pensé à des trucs comme

grep ".(t(.)t|T(.)t|T(.)T)3."
ou son équivalent
sed "/.(t(.)t|T(.)t|T(.)T)3./s//& 2:2 3:3/"

Mais cela revient au même: on s'arrache les cheveux à comprendre que la
référence 2 est "vide" (parce que non "matchée"), alors que la 3 ne l'est
pas. On pourrait croire que 2 puisse toujours représenter la seconde chaîne
matchée... mais non, pour cela il faudrait écrire

grep ".(t(.)t|T(.)t|T(.)T)(2|3|4)."

(et je sais parfaitement que cet exemple est idiot ;-)).

En passant, me semble être une autre extension GNU, je ne connaissais
pas. J'utilisais plutôt & dans le contexte ci-dessus (sed).


Antoine


Avatar
Jacques L'helgoualc'h
Le 07-06-2005, Antoine Leca a écrit :
[...]
J'avais pensé à des trucs comme

grep ".(t(.)t|T(.)t|T(.)T)3."
ou son équivalent
sed "/.(t(.)t|T(.)t|T(.)T)3./s//& 2:2 3:3/"

Mais cela revient au même: on s'arrache les cheveux à comprendre que la
référence 2 est "vide" (parce que non "matchée"), alors que la 3 ne l'est
pas. On pourrait croire que 2 puisse toujours représenter la seconde chaîne
matchée...


The REPLACEMENT can contain `N' (N being a number from 1 to 9,
inclusive) references, which refer to the portion of the match which is
contained between the Nth `(' and its matching `)'.

C'est la 2ème ouvrante à partir de la gauche ... matchée ou pas.

mais non, pour cela il faudrait écrire

grep ".(t(.)t|T(.)t|T(.)T)(2|3|4)."

(et je sais parfaitement que cet exemple est idiot ;-)).

En passant, me semble être une autre extension GNU, je ne connaissais
pas. J'utilisais plutôt & dans le contexte ci-dessus (sed).


Bin oui, elle semble même absente de info sed, cf. ci-dessus.
--
Jacques L'helgoualc'h

1 2