#1 Le 20/11/2009, à 17:03
- FRUiT
[Résolu] Variable expansion
Yop la foule
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 ??
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. 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
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
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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 !
Je vais faire ça c'est toujours ça de gagné !
Marci
[EDIT] Mais cela ne marche qu'en bash et non en sh domage
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
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
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
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