expression reguliere dans un grep

expression reguliere dans un grep - Linux et OS Alternatifs

Marsh Posté le 28-11-2002 à 00:18:27    

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

Reply

Marsh Posté le 28-11-2002 à 00:18:27   

Reply

Marsh Posté le 18-01-2003 à 13:06:20    

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
 

Reply

Marsh Posté le 18-01-2003 à 13:32:50    

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 ....

Reply

Marsh Posté le 18-01-2003 à 13:37:46    


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

Reply

Marsh Posté le 18-01-2003 à 13:40:51    

minusplus a écrit :


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




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

Reply

Marsh Posté le 18-01-2003 à 13:41:57    

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

Reply

Marsh Posté le 18-01-2003 à 14:51:19    

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
 

Reply

Sujets relatifs:

Leave a Replay

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