OVH Cloud OVH Cloud

bizarrerie sed

4 réponses
Avatar
FAb
Bonjour,

On m'a soumis une question sed qui me laisse perplexe :
"Comment remplacer une séquence d'espaces par un caractère (espace plus
précisément)".

Première idée de la personne requéreuse :
-e 's/[ ]+/ /g'
ou -e 's/[:space:]+/ /g'
Marche pas du tout.

On est parti sur :
-e 's/[:space:][:space:]*/ /g'
-e 's/[ ]\{1,\}/ /g'


Mais je ne suis pas vraiment satisfait car je ne m'explique pas le pourquoi.

Bon bin en relisant le man, je viens de tester avec -r et ça passe.
[ ]+ ce n'est pas standard, ce serait étendu ???

FAb

4 réponses

Avatar
Stephane Chazelas
On 15 May 2006 14:57:34 +0200, FAb wrote:
On m'a soumis une question sed qui me laisse perplexe :
"Comment remplacer une séquence d'espaces par un caractère (espace plus
précisément)".

Première idée de la personne requéreuse :
-e 's/[ ]+/ /g'
ou -e 's/[:space:]+/ /g'
Marche pas du tout.

On est parti sur :
-e 's/[:space:][:space:]*/ /g'
-e 's/[ ]{1,}/ /g'


Mais je ne suis pas vraiment satisfait car je ne m'explique pas le pourquoi.

Bon bin en relisant le man, je viens de tester avec -r et ça passe.
[ ]+ ce n'est pas standard, ce serait étendu ???


+ est un operateur des regexps etendues (ERE, comme dans awk ou
grep -E). sed implemente les regexp basiques (BRE comme dans
grep)

s/[[:blank:]]{1,}/ /g

est POSIX

s/[ ][ ]*/ /g

pour les sed qui ne reconnaissent pas cette syntaxe.

[:space:] inclue toutes sortes de caracteres d'espacement
comme le form feed (f) ou le vertical tab (v).

--
Stephane

Avatar
FAb
Stephane Chazelas writes:

On 15 May 2006 14:57:34 +0200, FAb wrote:
Mais je ne suis pas vraiment satisfait car je ne m'explique pas le pourquoi.

Bon bin en relisant le man, je viens de tester avec -r et ça passe.
[ ]+ ce n'est pas standard, ce serait étendu ???


+ est un operateur des regexps etendues (ERE, comme dans awk ou
grep -E). sed implemente les regexp basiques (BRE comme dans
grep)

s/[[:blank:]]{1,}/ /g

est POSIX

s/[ ][ ]*/ /g

pour les sed qui ne reconnaissent pas cette syntaxe.

[:space:] inclue toutes sortes de caracteres d'espacement
comme le form feed (f) ou le vertical tab (v).


Ok, merci pour tes lumières.
ERE, BRE va falloir que je révise.

FAb


Avatar
Loïc Restoux
Le 15 mai, à 12:57, FAb papotait :
On m'a soumis une question sed qui me laisse perplexe :
"Comment remplacer une séquence d'espaces par un caractère (espace plus
précisément)".


Si sed n'est pas obligatoire, on a aussi :
tr -s " "


--
No fortunes found

Avatar
FAb
Loïc Restoux writes:

Le 15 mai, à 12:57, FAb papotait :
On m'a soumis une question sed qui me laisse perplexe :
"Comment remplacer une séquence d'espaces par un caractère (espace plus
précisément)".


Si sed n'est pas obligatoire, on a aussi :
tr -s " "


Il l'était (sur un système embarqué).
Merci quand même.

FAb