Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/11/2009, à 17:03

FRUiT

[Résolu] Variable expansion

Yop la foule smile

Voila je voudrais supprimer les occurences d'une regex dans une variable.

J'y arrive comme ça :

 
 
SLIMVAR=$(echo "$VAR" | sed -r 's/PATTERN//g')

Je souhaiterais arriver exactement au même résultat, uniquement avec des expansions de variables. Du genre :

 
 
SLIMVAR=${VAR//PATTERN/}

J'ai attentivement lu :

${parameter/pattern/string}
    The pattern is expanded to produce a pattern just as in filename expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. If pattern begins with ‘/’, all matches of pattern are replaced with string. Normally only the first match is replaced. If pattern begins with ‘#’, it must match at the beginning of the expanded value of parameter. If pattern begins with ‘%’, it must match at the end of the expanded value of parameter. If string is null, matches of pattern are deleted and the / following pattern may be omitted. If parameter is ‘@’ or ‘*’, the substitution operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with ‘@’ or ‘*’, the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list.

dans le manuel de bash...

Mais tout ce que je teste stoppe l'exécution du script...

Voici mon exemple entier :

 
 
SLIMVAR=$(echo "$VAR" | sed -r 's/[\007]?(\033|\e|\E)(\[|\])?[0-9;]+[mM]//g')

J'ai testé donc :

 
 
SLIMVAR=${VAR//[\007]?(\033|\e|\E)(\[|\])?[0-9;]+[mM]/}

J'ai testé avec plein de slashes, d'antislashes, des guillemets simples ou doubles ça stoppe toujours mon script. J'en déduis que ma syntaxe est incorrecte...

Que faire ?? big_smile

Dernière modification par FRUiT (Le 20/11/2009, à 18:09)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#2 Le 20/11/2009, à 17:31

Link31

Re : [Résolu] Variable expansion

Je dirais que ta regexp est un peu trop compliquée pour bash... Je ne suis pas sûr qu'il gère toutes les fonctionnalités que tu utilises dans ta regexp. Pourquoi ne pas continuer à utiliser sed ?

Hors ligne

#3 Le 20/11/2009, à 17:37

FRUiT

Re : [Résolu] Variable expansion

Ben echo et sed je me dis que ça doit être bien moins rapide à traiter sans compter que tout ça s'exécute dans un sous-shell.

Et puis j'aime bien apprendre et savoir faire de nouvelles choses.

Mais alors 'PATTERN' ne doit pas être une expression régulière ?? Que doit-ce être d'autre. Enfin bon si ce n'est pas possible effectivement je vais pas insister héhé...


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#4 Le 20/11/2009, à 18:02

FRUiT

Re : [Résolu] Variable expansion

Alors j'avais 2 problèmes :

1) le shabang de mon script était #!/bin/sh

En remplaçant par #!/bin/bash ça marche déjà mieux. roll Le script continue...

2) Effectivement la REGEX était trop compliquée...

Les '+' ne sont pas correctement interprètés, ni les parenthèses, ni surement d'autres formes de notation.



Je mets [Résolu] merci Link31 pour ton aide smile

Dernière modification par FRUiT (Le 20/11/2009, à 18:14)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#5 Le 20/11/2009, à 18:14

nesthib

Re : [Résolu] Variable expansion

FRUiT a écrit :
 
 SLIMVAR=$(echo "$VAR" | sed -r 's/PATTERN//g')

Juste une petite remarque. Tu peux faire ça :

SLIMVAR=$( sed -r 's/PATTERN//g' <<<$VAR )

ce qui t'économise un echo
^^

voilà pour le chipotage


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#6 Le 20/11/2009, à 18:16

FRUiT

Re : [Résolu] Variable expansion

Ah effectivement ! smile

Je vais faire ça c'est toujours ça de gagné !

Marci smile

[EDIT] Mais cela ne marche qu'en bash et non en sh domage hmm

Dernière modification par FRUiT (Le 20/11/2009, à 18:23)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#7 Le 20/11/2009, à 20:39

Totor

Re : [Résolu] Variable expansion

Attention, les pattern bash n'ont rien à voire avec les regex.
Exemple :
le * signifie n'importe quel caractère en bash alors que pour les regex, il s'agit d'un quantifieur de l'expression précédante ( 0 ou n fois). D'ailleurs, les quantifieurs n'existent pas dans les pattern bash !


-- Lucid Lynx --

Hors ligne

#8 Le 20/11/2009, à 20:59

FRUiT

Re : [Résolu] Variable expansion

Totor a écrit :

Attention, les pattern bash n'ont rien à voire avec les regex.
[...] D'ailleurs, les quantifieurs n'existent pas dans les pattern bash !

What a shame !

LOL

Marci Totor pour ces explications smile


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#9 Le 21/11/2009, à 02:26

Totor

Re : [Résolu] Variable expansion

Totor a écrit :

D'ailleurs, les quantifieurs n'existent pas dans les pattern bash !

enfin ce n'est pas tout a fait vrai car * a aussi pr signification 0/n fois et ? signifie 1 seule fois
mais aucun rapport avec les quantifieurs regex !


-- Lucid Lynx --

Hors ligne