[Resolu] probleme alacon avec sed

Bonjour,

j’ai une chaine à parser, ça ressemble à :

chaine='# base <dc=mon,dc=domaine> with scope subtree'

et je veux recuperer « dc=mon,dc=domaine ».

Donc il y a plusieurs possibilité comme grep -Eo ‹ <[=,a-z]> › | cut -d< -f 1 | cut -d -f 1 ou tr gnagna mais moi ce que je voulais c’est un sed.
J’avais donc fait :

echo $chaine |sed 's/\<[,=a-z]*\>/\1/'

mais il est méchant, il me dit « sed: -e expression #1, char 16: invalid reference \1 on `s’ command’s RHS ».

Help ?

merci :slight_smile:

T’as pas l’air de bien comprendre comment fonctionne sed mon cher Fser :slight_smile:

m’enfin, old school que je suis, je ferais comme ça :

sed -e 's/.*</</' -e 's/>.*/>/'

Ouiiiii mais eug … normalement le \1 c’est ce qui a matché non ?
donc j’ai essayé avec plusieurs motifs, je peux vouloir le remplacer par toto \1 toto , et donc après tout pourquoi pas par «  » \1 «  » ?

Cela dit merci, j’ai adapté (je les veux PAS les < et >) et saibon :slight_smile:

(ah ah t’as pigé ce que je voulais … presque)

euh…

Mais là tu fais de la substitution

edit : j’ai aps tout pigé ton truc

[quote=“DexterWard, post:4, topic: 47768”]euh…

Mais là tu fais de la substitution

edit : j’ai aps tout pigé ton truc[/quote]

Je subsitue (oui oui, c’est du conditionnel ça monsieur) le com=mon,com=domaine dans ‘# base <dc=mon,dc=domaine> with scope subtree’ par … RIEN << ce qui a matché >> RIEN

Ce n’est pas plutôt ça que tu veux ?

sed -e 's/.*\<\([a-z=,]*\)\>.*/\1/'

[quote=“kineox, post:6, topic: 47768”]Ce n’est pas plutôt ça que tu veux ?

ça ça me renvoie “domaine”, et moi j’avais besoin de vraiment ce qui est entre chevron (donc dc=mon,dc=domaine) MAIS je remarque que toi tu arrives à utiliser \1 alors que moi ça jette …

Beh, t’as pas oublié les parentheses pour le \1 dans ton expression ou bien ?

Bah écoute je ne sais pas comment tu fais pour avoir ça… Ici (aussi bien sur Mac OS X que sur OpenBSD) j’ai :

$ echo '# base <dc=mon,dc=domaine> with scope subtree' | sed -e 's/.*\<\([a-z=,]*\)\>.*/\1/' dc=mon,dc=domaine

Et comme l’a indiqué doumdoum et comme tu aurais pu le voir si tu avais lu ma regexp, il faut utiliser les parenthèses pour matcher après avec # où # appartient à [1,9].
Tu confonds peut-être avec le symbole & (qui semble spécifique à sed) ?

Je t’invite fortement à lire sed(1) et re_format(7) sur ton système Unix le plus proche.

Edit : visiblement gsed n’aime pas le < et > (que j’avais copié direct de ta première regexp). Il faut donc utiliser sed -e ‹ s/.<([a-z=,])>.*/\1/ ›
Pourtant re_format(7) dit :

Mais il semble que gsed ne supporte pas toutes les expressions régulières. Merci GNU !

(regexp de merde, toujours aussi illisibles)

et sinon, j’avais testé avec des parentheses de capture.
et comment je fais ? je sais pas :slight_smile:
je teste sur ma machine perso asap

edit: mieux ici :

[code]# sed --version
GNU sed version 4.1.5
Copyright © 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

echo ‹ # base <dc=mon,dc=domaine> with scope subtree › | sed -e ‹ s/.<([a-z=,])>.*/\1/ ›

scope[/code]

Les meilleures solutions ne sont pas forcément les plus élégantes, mais celles qui marchent partout. :slight_smile:

[quote=« fser, post:11, topic: 47768 »]et sinon, j’avais testé avec des parentheses de capture.
et comment je fais ? je sais pas :crying:
je teste sur ma machine perso asap

edit: mieux ici :

[code]# sed --version
GNU sed version 4.1.5
Copyright © 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

echo ‹ # base <dc=mon,dc=domaine> with scope subtree › | sed -e ‹ s/.<([a-z=,])>.*/\1/ ›

scope[/code][/quote]
Et si tu lisais jusqu’au bout de mon post pour voir mon edit ? :slight_smile:

J’avais juste pas tilté gsed = sed du linux…
ya l’option"-r, --regexp-extended" sous nux.

et si je l’utilise, j’ai la même erreur que moi.

ce genre de remarques faussement désagréable ya que unreal qui a le droit de me les faire !

[quote=« fser, post:14, topic: 47768 »]ya l’option"-r, --regexp-extended" sous nux.

et si je l’utilise, j’ai la même erreur que moi.[/quote]
J’ai testé avec cette option mais j’avais le même résultat que sans.
Je ne comprends pas bien, tu as réussi à utiliser ma regexp au final ou pas ? :slight_smile:

[quote=“kineox, post:15, topic: 47768”]J’ai testé avec cette option mais j’avais le même résultat que sans.
Je ne comprends pas bien, tu as réussi à utiliser ma regexp au final ou pas ? :)[/quote]

nope

Tu as bien utilisé la deuxième version de la regexp qui est dans l’edit à la fin de mon post, n’est-ce pas ?

$ sed --version GNU sed version 4.1.5 Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law. $ echo '# base <dc=mon,dc=domaine> with scope subtree' | sed -e 's/.*<\([a-z=,]*\)>.*/\1/' dc=mon,dc=domaine

Et si tu lisais jusqu’au bout de son post pour voir son edit ? :slight_smile: