[REGEX] co*at will match "coat" OR "cat" <-- ah bon ??

co*at will match "coat" OR "cat" <-- ah bon ?? [REGEX] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 23-07-2014 à 17:22:41    

Bonjour,
 
en vérifiant la théorie dans plusieurs manuels, je suis tombé sur cette définition du wildcard:
 

Citation :

*   :    Match any number (or none) of the single character that immediately precedes it.
 
Classic Shell Scripting, O'Reilly


 
J'avoue que le "or none" m'a paru baroque.
 
En regardant ailleurs:
 

Citation :

The regex * means "zero or more occurrences." The star is a suffix operator meaning it follows the expression. Another way of looking at this is that the star means the preceding expression is OPTIONAL.
 
  Subject contains reg. expr. "co*at"
Will match "coat" OR "cat."
 
http://gravity.tbates.org/reg-101.html


 
 
 
Du coup je me suis jeté sur mon terminal pour voir si j'avais halluciné ou pas depuis des années que j'utilise '*' dans mes expressions, et non, co*t ne matche pas 'cat'.
 

Code :
  1. % ls
  2. cat  coat
  3. % ls co*t
  4. coat
  5. % ls | grep co*t
  6. coat


 
Quelqu'un peut tirer ca au clair ??  [:er1c:1]  

Reply

Marsh Posté le 23-07-2014 à 17:22:41   

Reply

Marsh Posté le 23-07-2014 à 20:30:08    

ligne 4, tu as pas le a de co*at, alors qu'il est présent dans les exemples
 
aussi, grep, le shell et autres, n'utilise pas les regex par défaut
(option -r dans les commandes en général)

Message cité 1 fois
Message édité par kazord44 le 23-07-2014 à 20:32:21
Reply

Marsh Posté le 24-07-2014 à 00:18:44    

bien sûr que si, grep utilise les regex, c'est ça raison d'être !

 

par contre, le shell, lui, n'utilise pas du tout les regex (à moins de le spécifier expressément dans des tests entre [[ avec l'opérateur =~), mais des caractères génériques (glob).

 
Citation :

option -r dans les commandes en général

r comme ringard ? ou ignare !
quand on sait pas...

Message cité 2 fois
Message édité par Profil supprimé le 25-07-2014 à 05:26:10
Reply

Marsh Posté le 24-07-2014 à 07:32:56    


Tu  cherches une sanction ?


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 24-07-2014 à 07:34:48    

kazord44 a écrit :

(option -r dans les commandes en général)


-r c'est plutôt pour indiquer que la commande doit chercher récursivement dans les répertoires.


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 24-07-2014 à 07:37:44    

Par rapport à grep, il suffit de lire le manpage
en particulier la section

Citation :


   Matcher Selection
       -E, --extended-regexp
              Interpret PATTERN as an extended regular expression (ERE, see below).  (-E is specified by POSIX.)

 

      -F, --fixed-strings
              Interpret  PATTERN  as  a  list of fixed strings, separated by newlines, any of which is to be matched.  (-F is
              specified by POSIX.)

 

      -G, --basic-regexp
              Interpret PATTERN as a basic regular expression (BRE, see below).  This is the default.

 

      -P, --perl-regexp
              Interpret PATTERN as a Perl regular expression (PCRE, see below).  This is highly experimental and grep -P  may
              warn of unimplemented features.


Message édité par O'Gure le 24-07-2014 à 07:42:19

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 24-07-2014 à 10:50:38    

Okok, j'a beau mettre toutes les differentes options de regex, dans aucun cas mon grep n'interprete le '*' comme les manuels que j'ai cités plus haut le disent.
 

Citation :

% ls
cat  coat
 
% ls | grep -G co*at
coat
 
% ls | grep -E co*at
coat
 
% ls | grep co*at    
coat

Reply

Marsh Posté le 24-07-2014 à 13:31:14    

Salut,
 

doublebeurre a écrit :

Bonjour,
 
Du coup je me suis jeté sur mon terminal pour voir si j'avais halluciné ou pas depuis des années que j'utilise '*' dans mes expressions, et non, co*t ne matche pas 'cat'.
 
Quelqu'un peut tirer ca au clair ??


 
Mais comme ça, si :

$ ls c*at
cat  coat
 
$ ls | grep 'c*at'
cat
coat


 
 ;)  
 
 
 
IgnarE avec un E… quand on sait pas...  :non:  
 
 


---------------
$ man woman
Reply

Marsh Posté le 24-07-2014 à 13:32:41    

ls | grep -E 'co*at'


---------------
ventes - mon feed
Reply

Marsh Posté le 24-07-2014 à 16:01:37    

odon4 a écrit :

ls | grep -E 'co*at'


 
 
Oui voila :jap: , en fait, que ce soit Extended ou Basic regex, ca marche selon la definition, c'est donc les regex du shell qui ne sont pas les regex "standard" decrites dans les bouquins.

Reply

Marsh Posté le 24-07-2014 à 16:01:37   

Reply

Marsh Posté le 25-07-2014 à 05:28:44    

ignare avec un e, c'est corrigé. merci.

 

ça vous fait pas bondir les gars qui envoient les autres dans le mur ?

 
Citation :

c'est donc les regex du shell qui ne sont pas les regex "standard" decrites dans les bouquins.

je me répète : le shell n'utilise pas les regex, mais des caractères génériques.

Message cité 1 fois
Message édité par Profil supprimé le 25-07-2014 à 05:30:48
Reply

Marsh Posté le 25-07-2014 à 07:23:13    


T'es lourd. Si tu cherches à tomber sur tous les gens qui font des erreurs dans leur réponse de cette manière, ta place n'est pas ici.
C'est clairement mon dernier avertissement. Compris ?


Message édité par O'Gure le 25-07-2014 à 07:24:52

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 25-07-2014 à 18:22:20    

quand on se trompe, on revient faire amende honorable, et corriger ses dires erronés, on ne va pas pleurer sa mère à la modération.

Reply

Marsh Posté le 25-07-2014 à 19:40:42    


Tu peux me dire quel est ton problème ? un moderateur n aurait pas le droit de consulter et participer aux topics sans alerte comme tout forumeur ?!

 

Ici, on est cordial et on n'insulte pas !
Maintenant si tu ne peux changer ton comportement je t invite à aller voir ailleurs !


Message édité par O'Gure le 25-07-2014 à 19:55:41

---------------
Relax. Take a deep breath !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed