Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1676 connectés 

 


Dernière réponse
Sujet : expression reguliere dans un grep
sebweb

jultey a écrit :

Salut,
J'ai un p'tit problème avec une expression régulière dans un shell...
 
Je voudrais lister les fichiers qui ont un nom de 4 caracteres et eventuellement une extension quelconque (XXXX[.extension])
 
J'y suis arrivé avec cette commande :
 
ls /home/jultey/essai/ | grep "\<[a-zA-Z0-9]\{4\}\>"
 
qui rend bien ce que j'attends :
1324.to
allo.lpg
argp
argz.h
stab.h
time.h
titi
toto
utmp.h
 
Mais je ne comprend pas ou le shell voit que l'extension est facultative...
puisqu'entre le {4} et le \> je n'ai rien mit...
 
Si quelqu'un pouvait m'éclairer...
Merci


 
C'est pas expression réguliere, mais expression rationelle.
C'est uen faute de traduction qui est malheureusement rentrée dans le language courant
 


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
sebweb

jultey a écrit :

Salut,
J'ai un p'tit problème avec une expression régulière dans un shell...
 
Je voudrais lister les fichiers qui ont un nom de 4 caracteres et eventuellement une extension quelconque (XXXX[.extension])
 
J'y suis arrivé avec cette commande :
 
ls /home/jultey/essai/ | grep "\<[a-zA-Z0-9]\{4\}\>"
 
qui rend bien ce que j'attends :
1324.to
allo.lpg
argp
argz.h
stab.h
time.h
titi
toto
utmp.h
 
Mais je ne comprend pas ou le shell voit que l'extension est facultative...
puisqu'entre le {4} et le \> je n'ai rien mit...
 
Si quelqu'un pouvait m'éclairer...
Merci


 
C'est pas expression réguliere, mais expression rationelle.
C'est uen faute de traduction qui est malheureusement rentrée dans le language courant
 

minusplus ça me fait du mal de répondre avec kêk chose qui n'est pas une Regexp d'ailleurs ! :D
parano

minusplus a écrit :


find ./ \( -name "????" -o -name "????.*" \) -print
 




 
J'hesitais a crier "minnnnuusssplusss onnnn t'apppeeelllleuhhhh"  :D

minusplus


find ./ \( -name "????" -o -name "????.*" \) -print
 

myocastor

jultey a écrit :

Salut,
J'ai un p'tit problème avec une expression régulière dans un shell...
 
Je voudrais lister les fichiers qui ont un nom de 4 caracteres et eventuellement une extension quelconque (XXXX[.extension])
 
J'y suis arrivé avec cette commande :
 
ls /home/jultey/essai/ | grep "\<[a-zA-Z0-9]\{4\}\>"
 
qui rend bien ce que j'attends :
1324.to
allo.lpg
argp
argz.h
stab.h
time.h
titi
toto
utmp.h
 
Mais je ne comprend pas ou le shell voit que l'extension est facultative...
puisqu'entre le {4} et le \> je n'ai rien mit...
 
Si quelqu'un pouvait m'éclairer...
Merci


 
Dans ton modèle, tu ne précises pas le début ou la fin de la chaine. Donc le grep cherche 4 caractères (hors ponctuation, c'est à dire en particulier sans . ) qui se suivent.
le utmp.h  sort bien  
mais un un.deu.troi   marcherait aussi ....

jultey Cette commande semble mieux marcher.
 
ls -al /usr/include/ | grep "^-.* \<\w\{4\}\>\.\?\w*\*\?$"
 
Tentative d'explications :
'^-'
= un '-' en debut de ligne (fichiers ordinaires)
 
'.*'
= suite de caractères quelconques (les diff. infos du ls -al)
 
' \<'
= début de mot (debut du nom de fichier)
 
'\w\{4\}' = '[[:alnum:]]\{4\}' = '[a-zA-Z0-9]\{4\}'
= 4 caractères alphanumériques (nom du fichier)
 
'\>'
= fin de mot
 
'\.\?'
= un point facultatif
 
'\w*' = '[[:alnum:]]*' = '[a-zA-Z0-9]*'
= des caracteres alphanumériques quelconques facultatifs (l'extension)
 
'\*\?'
=> une '*' facultative a la fin du fichier (ci celui-ci est un
fichier executable -je crois-)
 
'$'
=> fin de ligne
 
jultey Salut,
J'ai un p'tit problème avec une expression régulière dans un shell...
 
Je voudrais lister les fichiers qui ont un nom de 4 caracteres et eventuellement une extension quelconque (XXXX[.extension])
 
J'y suis arrivé avec cette commande :
 
ls /home/jultey/essai/ | grep "\<[a-zA-Z0-9]\{4\}\>"
 
qui rend bien ce que j'attends :
1324.to
allo.lpg
argp
argz.h
stab.h
time.h
titi
toto
utmp.h
 
Mais je ne comprend pas ou le shell voit que l'extension est facultative...
puisqu'entre le {4} et le \> je n'ai rien mit...
 
Si quelqu'un pouvait m'éclairer...
Merci

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)