[exp reg]liste des fichiers commençant par "annee4" et de 7 caractères

liste des fichiers commençant par "annee4" et de 7 caractères [exp reg] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 05-04-2014 à 22:08:07    

Bonjour à tous !
alors voilà mon problème :) j'ai un petit exercice à faire, rien de bien méchant et pourtant !
 
Je dois simplement afficher la liste des fichiers commençant par "annee4" et de sept lettres maximum sous entendu que ça peut faire moins.
J'ai donc élaborer cette commande : 'ls | grep ^annee4?'
 
pourtant, cela ne me donne aucun résultat... j'ai bien trouvé une alternative avec cette commande : 'ls | grep ^annee4.' mais avec le point, j'omets le cas ou mon fichier s'appelle annee4...
 
Voyez par vous même, si quelqu'un peut m'expliquer où est mon erreur ça serait génial :)
 
http://img11.hostingpics.net/pics/941700Capture.png
 
Je vous remercie par avance !

Reply

Marsh Posté le 05-04-2014 à 22:08:07   

Reply

Marsh Posté le 06-04-2014 à 00:57:17    

Grep utilise de vraies regexp, pas de globbing.
ls | grep '^annee4.?'

Message cité 1 fois
Message édité par tuxerman12 le 06-04-2014 à 01:02:41
Reply

Marsh Posté le 06-04-2014 à 10:17:13    

tuxerman12 a écrit :

Grep utilise de vraies regexp, pas de globbing.
ls | grep '^annee4.?'


 
Pas de différence :( aucun résultat c'est vraiment bizarre :s

Reply

Marsh Posté le 06-04-2014 à 10:26:19    

Et quelque chose comme ça :

Code :
  1. ls -l |cut -d " " -f 10|grep '^annee4.*'


Le soucis dans ton cas c'est que ls donne c'est que tes lignes ne commencent pas par le nom du fichier mais par les attributs du fichier donc le "^" ne peut fonctionner ;)

Reply

Marsh Posté le 06-04-2014 à 10:38:35    

salut,
 
en bash:

Code :
  1. $ ls -1 test/
  2. annee1
  3. Annee2
  4. annee4
  5. annee41
  6. annee45
  7. annee4510
  8. annee4_saucisse
  9. banane
  10. $ printf '%s\n' test/annee4?(?)
  11. test/annee4
  12. test/annee41
  13. test/annee45


pour éviter les collisions avec le globbing du shell, il est préférable de mettre les regex entre apostrophes/guillemets.
 
et évite de parser ls, c'est souvent source d'erreurs. :(

Reply

Marsh Posté le 06-04-2014 à 10:47:13    

Salut,
 

Benh_31 a écrit :

Pas de différence :( aucun résultat c'est vraiment bizarre :s


 
Il faut utiliser les expressions étendues (egrep ou grep -E) :
 

ls | egrep '^annee4.{0,1}$'


 ;)  

Reply

Marsh Posté le 06-04-2014 à 10:54:48    

SnowBear a écrit :

Et quelque chose comme ça :

Code :
  1. ls -l |cut -d " " -f 10|grep '^annee4.*'


Le soucis dans ton cas c'est que ls donne c'est que tes lignes ne commencent pas par le nom du fichier mais par les attributs du fichier donc le "^" ne peut fonctionner ;)


 
Tout à fait d'accord en y repensant ! par contre le fait de mettre une étoile à la fin, ça va pas permettre de récupérer des noms de plus de 7 caractères ?
Ta formule marche en tout cas !
 
 
 
 
A quoi sert le %s dans ta commande ?  
 
et mettre (?) ça permet de rendre facultatif le caractère ?

Reply

Marsh Posté le 06-04-2014 à 11:11:39    

'%s\n' est l'indication du format à adopter par la commande printf : s pour string, le \n est le passage à la ligne.
 
man bash a dit:

Citation :

?(liste-motif)
                     Correspond à zéro ou une occurrence des motifs indiqués.


Citation :

?      Correspond à n'importe quel caractère.

nb: il faut que l'option extglob soit active.

Reply

Marsh Posté le 06-04-2014 à 11:30:20    

D'accord merci pour les explications ! Tout marche nickel :)

Reply

Marsh Posté le 06-04-2014 à 11:49:53    


Ben du coup ls annee?(4)? devrait faire l'affaire, non ?


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

Marsh Posté le 06-04-2014 à 11:49:53   

Reply

Marsh Posté le 06-04-2014 à 11:58:55    

Benh_31 veut lister les fichiers qui commencent par annee4, et suivis d'un caractère facultatif.
 
annee?(4)? rend le 4 facultatif, suivi d'un caractère.
:(

Message cité 1 fois
Message édité par Profil supprimé le 06-04-2014 à 12:02:34
Reply

Marsh Posté le 06-04-2014 à 12:09:51    


Pourtant, avec un listing du genre :

$ ls -1
Annee247
annee4
Annee4
annee41
Annee44
annee45
annee451
annee48
annee51
Annee51
Annee8
annee88


Le résultat est le bon :

$ ls annee?(4)?
annee4  annee41  annee45  annee48



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

Marsh Posté le 06-04-2014 à 12:25:07    

Par contre ce n'est pas bon si il y a des fichiers comme anneex  :(  
 

$ ls -1 annee?(4)?
annee4
annee41
annee45
annee48
annee8
annees


Comme quoi faut toujours pousser ses investigations jusqu'au bout  :pt1cable:


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

Marsh Posté le 06-04-2014 à 14:44:05    

Si la nuit porte conseil, manger aussi apparemment  :D  
 
Cette syntaxe devrait le faire :  

ls -1 annee4?([0-9])
annee4
annee41
annee45
annee48


 ;)


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

Marsh Posté le 06-04-2014 à 15:46:01    

Benh_31 a écrit :


 
Tout à fait d'accord en y repensant ! par contre le fait de mettre une étoile à la fin, ça va pas permettre de récupérer des noms de plus de 7 caractères ?
Ta formule marche en tout cas !
 
 


 

Benh_31 a écrit :


 
A quoi sert le %s dans ta commande ?  
 
et mettre (?) ça permet de rendre facultatif le caractère ?


 
Dans mon exemple j'ai zappé ta contrainte du nombre de caractères !  

Reply

Marsh Posté le 06-04-2014 à 19:38:11    

Benh_31 a écrit :

Bonjour à tous !
Je dois simplement afficher la liste des fichiers commençant par "annee4" et de sept lettres maximum sous entendu que ça peut faire moins.
!


Pour être conforme à ta demande :  

Citation :

find . -type f -regex './annee4.?'


Reply

Marsh Posté le 07-04-2014 à 08:25:53    

Wahou, pas si facile que ça mon truc ^^ en tout cas merci pour votre intérêt !

Reply

Marsh Posté le 07-04-2014 à 10:37:54    

Benh_31 a écrit :

Wahou, pas si facile que ça mon truc ^^ en tout cas merci pour votre intérêt !


oggy@aoi ~/tmp/test-annee % ls                          
annee1  annee24  annee4  annee41  annee42  annee432
oggy@aoi ~/tmp/test-annee % ls | grep -E "^annee4[0-9]?$"
annee4
annee41
annee42


Message cité 1 fois
Message édité par o'gure le 07-04-2014 à 10:38:02

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

Marsh Posté le 07-04-2014 à 10:48:01    

o'gure a écrit :

ls | grep -E "^annee4[0-9]?$"


En faisant comme ça je vais pas ignorer les fichiers commençant pas annee4 suivi d'une lettre ou d'un autre caractères autre qu'un chiffre ?


Message édité par Benh_31 le 07-04-2014 à 10:48:32
Reply

Marsh Posté le 07-04-2014 à 10:57:03    

Si, vu que tous tes exemples avaient des chiffre j'en concluais que c'était le format :o
Si tu veux n'importe quel caractère

oggy@aoi ~/tmp/test-annee % ls | grep -E "^annee4.?$"    
annee4
annee41
annee42


Message édité par o'gure le 07-04-2014 à 10:57:38

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

Marsh Posté le 07-04-2014 à 13:31:28    

ok, merci beaucoup

Reply

Marsh Posté le 23-11-2018 à 14:40:51    

Merci à Timon pour la réponse.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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