[Linux] regexp sur une variable ?

Résolu/Fermé
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 - 22 nov. 2012 à 22:51
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 23 nov. 2012 à 14:03
Salut,
Est-ce possible de s'amuser avec une regexp mais au lieu de faire ça sur un fichier, de le faire sur une variable histoire de pas encombrer le système inutilement ?

exemple :
$ mavariable="chaine de caractère 134 1 t231saluz"


de pouvoir faire une substitution avec une regexp sur cette chaine facilement ?!
s/RE/substitut/

je pense à sed mais ça peut être n'importe quel autre outil adapté et qui prenne en compte les regexp.
Il me semble qu'avec grep c'est pas vraiment ça.
merci.
A voir également:

2 réponses

Utilisateur anonyme
22 nov. 2012 à 23:03
salut,

en effet, grep est un outil de recherche/sélection, pas de manipulation.

donc, oui, avec sed, awk, ...

on peut aussi bidouiller une fonction en bash, ksh, zsh.

sh, par contre, devra faire appel à des programmes externes.
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
Modifié par Swiss Knight le 22/11/2012 à 23:07
Ok, mais comment utiliser un de ces outils sur une simple variable et non un fichier ? Est-ce seulement possible ?
0
Utilisateur anonyme
22 nov. 2012 à 23:23
à partir de bash, c'est simple ;)
$ mavariable="chaine de caractère 134 1 t231saluz"
$ [[ $mavariable =~ (134) ]] && echo "${mavariable/${BASH_REMATCH[1]}/autre_chose}"
chaine de caractère autre_chose 1 t231saluz

en zsh, je ne sais pas si ça ne searit pas être encore plus simple.

sinon,
echo "var" | sed 's/re/changement/'
!
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
23 nov. 2012 à 12:50
le echo $var | sed
va très bien, merci
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
22 nov. 2012 à 23:23
Salut,

En espérant avoir compris ta demande...

$ mavariable="chaine de caractère 134 1 t231saluz"

$ echo ${mavariable}
chaine de caractère 134 1 t231saluz

$ echo ${mavariable/134/256}
chaine de caractère 256 1 t231saluz

$ echo ${mavariable//a/A}
chAine de cArActère 134 1 t231sAluz

$ echo ${mavariable^^a}
chAine de cArActère 134 1 t231sAluz

$

0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
23 nov. 2012 à 12:52
Salut, la question était simple, j'aimerai en gros m'exercer à faire des regexp sans devoir à chaque fois ouvrir un fichier, écrire dedans, et le sauver, et l'effacer à la fin.
Donc faire ça dans une variable c'ést l'idéal.
Tes solutions fonctionnement bien, mais dès qu'on fait appel à des groupes de caractères, par exemple s/.*\([0-9][0-9]*\).*/ \1/ ça ne fonctionne plus :(
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
23 nov. 2012 à 13:10
Les shells ont vite leurs limites et les outils tels que sed, awk, etc. deviennent LA solution...

Sinon plutôt qu'un echo et un pipe, du moins avec bash, tu peux aussi faire comme ça :

sed 's/re/changement/' <<<${var}
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
23 nov. 2012 à 13:27
Tiens j'avais vu un triple chevron...
C'est une bonne habitude à prendre de mettre les noms de variables entre accolades comme ça ?
Je veux dire, ça ne changera jamais rien de les mettre entre accolades que sans accolades ? Ou y a-t-il une différence utile et nécessaire de temps en temps ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
23 nov. 2012 à 13:45
C'est une bonne habitude à prendre de mettre les noms de variables entre accolades comme ça ?
Oui !

Je veux dire, ça ne changera jamais rien de les mettre entre accolades que sans accolades ? Ou y a-t-il une différence utile et nécessaire de temps en temps ?
Le principal problème se situe au niveau de la concaténation de variables.
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
23 nov. 2012 à 13:59
bon, comme ce n'est pas demain que je risque de devoir concaténer des variables, ça devrait jouer :-)
merci !
0