-
Problème avec sed * et +
Bonjour,
j'ai ma commande SED qui ne fonctionne pas comme je le souhaite :
Remplacer les [ par ${ et les ] par }
ça fonctionne bien avec la commande ci dessous
sed 's/\[\([a-zA-Z]*\)]/${\1}/g' aa
Par contre en remplaçant l'astérix * par +
sed 's/\[\([a-zA-Z]+\)]/${\1}/g' aa
je voulais que si le sed rencontrais
[] cela ne remplace pas mais hélas si dans ce cas [] devient ${} alors que l'expression
[a-zA-Z]+ n'est pour moi pas rempli
J'espère avoir été clair :ccool:
-
Dans les regex du shell, le quantificateur + doit être échappé mais pas le *.
Personnellement j'utilise souvent l'option -r (regex étendues) de sed, si ta version le permet.
-
non ma version de SED ne permet pas l'option -r
de plus l'échappement de + ne fait pas mieux fonctionner la commande
je précise qu'avec le + plus AUCUNE substitution ne marche ainsi :
[xterm] devient bien ${term} avec *
alors que ça reste [xterm] avec le + (alors que pour moi il y a bien au moins 1 ou plus de caractère matché)
je comprend tjs pas
-
Je n'ai pas trop de solution pour ton +, mais avec ceci : \{1,\} ça fait pareil et ça semble marcher :)
ps.: il y a un forum pour AIX ;)
-
\+ est une extension GNU. Or, AIX n'utilise pas GNUsed (si je me souviens bien).
-
je cherche à comprendre
* => 0 ou n caractère
+ => 1 ou n caractère
? => 0 ou 1 caractère
y a bien qq'un qui va me donner une réponse :ccool:
-
Il aurait été bon (à mon goût) d'avoir la version de sed que tu utilises (s'il n'y a ni -r, ni -i, ni --version..., alors ce n'est pas GNU/sed), ainsi qu'un échantillon représentatif du fichier à traiter, et la sortie attendue.
Si tu utilises la version de sed livrée par défaut avec AIX, alors tu devrais suivre les recommandations d'Alek-C, car `+` et `?` n'y sont pas disponible...
voir (en anglais:(, n'ai pas trouvé en français) :
sed sur AIX
manipuler du texte avec sed sur AIX
-
+1, je ne vois pas ce que tu veux de plus comme réponse :) Comme N_BaH le signale, sed (et globalement, beaucoup d'autres outils) ne fonctionnent pas exactement de la même manière que cela soit sous Linux ou sous d'autres OS (notamment AIX qui est franchement à la bourre de ce côté là).
Et il semble donc que + et ? ne soit donc tout simplement pas supportés. CQFD