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/10/2015, à 10:31

Sciensous

[Résolu] operateur shell =~

hello, je suis tombé sur des exemples shell avec l'opérateur =~ dans un test if

à quoi correspond-il ?

merci

Dernière modification par Sciensous (Le 20/10/2015, à 14:08)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#2 Le 20/10/2015, à 10:55

Postmortem

Re : [Résolu] operateur shell =~

Bonjour,

Il sert dans les tests faits entre [[ et ]] :

[[ chaine =~ expression_régulière ]]

Edit :
Voir dans man bash, avec cette commande si ton man est en Anglais :

man -P 'less +/"^ *Compound Commands"' bash

Dernière modification par Postmortem (Le 20/10/2015, à 11:03)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 20/10/2015, à 11:41

Alex10336

Re : [Résolu] operateur shell =~

C'est l'opérateur " n'est pas égal à "

---

Édit: v--- omg, au temps pour moi ! deuxième mauvais conseil du jour. Je vais arrêter du coup smile

Dernière modification par Alex10336 (Le 20/10/2015, à 14:38)


« On ne répond pas à une question par une autre question. » (moi ;-) )

Hors ligne

#4 Le 20/10/2015, à 11:59

Postmortem

Re : [Résolu] operateur shell =~

Alex10336 a écrit :

C'est l'opérateur " n'est pas égal à "

Ah non, du tout !
"N'est pas égal à", c'est : !=

=~ : c'est "correspond à l'expression régulière"


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#5 Le 20/10/2015, à 12:04

ar barzh paour

Re : [Résolu] operateur shell =~

un exemple

#!/bin/bash
mot="chez moi"

for n in chez moi toi
do
if [[ $mot =~ $n ]]
then 
echo "OK contient $n"
else
echo "ne contient pas $n"
fi
done
read g
exit 0

@postmortem
la commande que tu donnes me retourne "Pattern not found (press RETURN) et me renvoi à la page 1 de BASH ( car man en français sans doute)

Dernière modification par ar barzh paour (Le 20/10/2015, à 12:08)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#7 Le 20/10/2015, à 12:19

Postmortem

Re : [Résolu] operateur shell =~

ar barzh paour a écrit :

@postmortem
la commande que tu donnes me retourne "Pattern not found (press RETURN) et me renvoi à la page 1 de BASH ( car man en français sans doute)

Oui, c'est pour ça.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 20/10/2015, à 12:25

MicP

Re : [Résolu] operateur shell =~

man -LC -P 'less +/"^ *Compound Commands"' bash

Dernière modification par MicP (Le 20/10/2015, à 12:27)

Hors ligne

#9 Le 20/10/2015, à 12:26

ar barzh paour

Re : [Résolu] operateur shell =~

@MicP merci pour le lien
remarque
man -LCP 'less +/"^ *Compound Commands"' bash me renvoie vers la page 1 de bash

Dernière modification par ar barzh paour (Le 20/10/2015, à 12:30)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#10 Le 20/10/2015, à 12:30

MicP

Re : [Résolu] operateur shell =~

C'est avec plaisir, on m'en a tellement donné ici (et ailleurs), que je ne pourrais jamais tous les rendre. smile

Hors ligne

#11 Le 20/10/2015, à 12:47

Postmortem

Re : [Résolu] operateur shell =~

ar barzh paour a écrit :

@MicP merci pour le lien
remarque
man -LCP 'less +/"^ *Compound Commands"' bash me renvoie vers la page 1 de bash

man -L C -P 'less +/"^ *Compound Commands"' bash

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 20/10/2015, à 12:58

MicP

Re : [Résolu] operateur shell =~

Désolé, j'avais modifié la ligne de commande entre temps.

Hors ligne

#13 Le 20/10/2015, à 14:07

Sciensous

Re : [Résolu] operateur shell =~

merci à tous pour vos réponses smile

donc c'est l'équivalent en bash de echo $texte | grep soustexte
cool


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#14 Le 20/10/2015, à 18:31

ar barzh paour

Re : [Résolu] operateur shell =~

pas tout à fait
Postmortem a écrit
=~ : c'est "correspond à l'expression régulière"
exemple tiré de http://tldp.org/LDP/abs/html/bashver3.h … EXMATCHREF

 #!/bin/bash
variable="This is a fine mess."
echo "$variable"
# Regex matching with =~ operator within [[ double brackets ]].
if [[ "$variable" =~ T.........fin*es* ]]
# NOTE: As of version 3.2 of Bash, expression to match no longer quoted.
then
  echo "match found"
      # match found
fi
exit 0

donne bien match found

autre exemple

#!/bin/bash

while :
do
echo "a , b : caractères de a à z en minuscule"
echo "C caractère en majuscule"
echo "entrer un texte sous la forme aaa-bb-CCCC "
read a
if [[ "$a" =~ [a-z][a-z][a-z]-[a-z][a-z]-[A-Z][A-Z][A-Z][A-Z] ]]

then
  echo "ok $a est bien de la forme aaa-bb-CCCC"
	 read g
	exit 0
else
  echo "désolé"
  echo "l'entrée $a n'est pas sous la forme aaa-bb-CCCC"
  echo "recommencez !"
fi
done

Dernière modification par ar barzh paour (Le 20/10/2015, à 18:51)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#15 Le 21/10/2015, à 15:01

Sciensous

Re : [Résolu] operateur shell =~

ok, je suis allé un peu vite puisque c'est plus puissant que le grep vu que les expressions régulières rentrent en jeu.

si je dis que c'est plus proche d'un mask informatique j'ai bon ?
(comparaison non bit à bit mais char à char wink )


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#16 Le 21/10/2015, à 17:31

Postmortem

Re : [Résolu] operateur shell =~

Sciensous a écrit :

ok, je suis allé un peu vite puisque c'est plus puissant que le grep vu que les expressions régulières rentrent en jeu.

si je dis que c'est plus proche d'un mask informatique j'ai bon ?
(comparaison non bit à bit mais char à char wink )

Dans grep, les expressions régulières entrent en jeu aussi.

Et comme tu le disais, ceci :

if echo $texte | grep soustexte

Correspond en gros à :

if [[ $texte =~ soustexte ]]

Disons que le résultat du test sera le même.

Par contre, attention :

$ toto=aB
$ [[ $toto = [A-Z] ]] && echo OK
$ [[ $toto =~ [A-Z] ]] && echo OK
OK
$ echo "$toto" | grep -q '[A-Z]' && echo OK
OK
$ [[ $toto =~ ^[A-Z]$ ]] && echo OK
$ echo "$toto" | grep -q '^[A-Z]$' && echo OK
$ 

Edit :
Si je reprends l'exemple de ar barzh paour :

$ a=666-aaa-bb-CCCC-666
$ [[ "$a" =~ [a-z][a-z][a-z]-[a-z][a-z]-[A-Z][A-Z][A-Z][A-Z] ]] && echo "$a est bien de la forme aaa-bb-CCCC"
666-aaa-bb-CCCC-666 est bien de la forme aaa-bb-CCCC
$ [[ "$a" =~ ^[a-z][a-z][a-z]-[a-z][a-z]-[A-Z][A-Z][A-Z][A-Z]$ ]] && echo "$a est bien de la forme aaa-bb-CCCC"
$ 

Il ne faut pas oublier que l'expression régulière, si on ne lui précise pas le "^" et le "$", cherche une partie correspondante dans la chaîne.

Dernière modification par Postmortem (Le 21/10/2015, à 17:37)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#17 Le 21/10/2015, à 17:47

ar barzh paour

Re : [Résolu] operateur shell =~

@postmortem

et oui je suis allé trop vite dans les exemples et pas assez analysé ....


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#18 Le 21/10/2015, à 17:49

Rufus T. Firefly

Re : [Résolu] operateur shell =~

Salut,

Comme personne ne l'a mentionné, je conseille ceci, la bible du bash (en français, ce qui est toujours agréable) : http://abs.traduc.org/abs-fr/


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#19 Le 21/10/2015, à 19:12

Sciensous

Re : [Résolu] operateur shell =~

encore merci à vous pour ces réponses bien documentées wink


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne