#1 Le 30/06/2016, à 22:21
- Nym
[Résolu] Changement dans interprétation regexp ?
Bonjour.
J'utilise des répertoires de sauvegarde horodatés, sous la forme aaaammjj-hhmm-type où type donne le type de la sauvegarde sur 4 lettres (complète, incrémentale...).
Pour faire le tri dans ces répertoires et ne retenir que celui contenant la dernière sauvegarde complète, par exemple, je pensais utiliser le code suivant :
ls /media/Backup | awk '/^[0-9]{8}\-[0-9]{4}\-Comp/ {print $0}'
Eh bien ça ne fonctionne pas alors que
ls /media/Backup | awk '/^[0-9]+\-[0-9]+\-Comp/ {print $0}'
et
ls /media/Backup | awk '/^[0-9]+-[0-9]+-Comp/ {print $0}'
fonctionnent parfaitement.
J'ai cherché dans les pages man de awk et egrep, mais je ne comprends pas pourquoi mes spécifications avec accolades ne sont pas interprétées.
Quelqu'un aurait-il une explication ?
Je pourrais certes faire ça ainsi :
ls /media/Backup | awk '/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-Comp/ {print $0}'
Mais je ne trouve pas ça très élégant.
Dernière modification par Nym (Le 01/07/2016, à 18:57)
Nym
Ubuntu 18.04.1 LTS 64bits
Hors ligne
#2 Le 30/06/2016, à 22:59
- bertrand0
Re : [Résolu] Changement dans interprétation regexp ?
Il faudrait savoir vers quelle implementation de awk pointe le lien symbolique /usr/bin/awk.
S'il s'agit de gawk, tu pourrais avoir à préciser l'option -r selon la version. Dans tous les cas, il faut te référer à la page de man de ta version : gawk, mawk, nawk...
Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
Buffon, Discours sur le style
Hors ligne
#3 Le 01/07/2016, à 05:05
- pingouinux
Re : [Résolu] Changement dans interprétation regexp ?
Bonjour,
Pour compléter la réponse de bertrand0, et connaître le awk que tu utilises, tu peux donner le retour de
ls -l /usr/bin/*awk /etc/alternatives/*awk
La forme suivante est bien interprétée par gawk, mais pas par mawk :
ls ... | awk '/^[0-9]{8}-[0-9]{4}-Comp/ {print}'
Hors ligne
#4 Le 01/07/2016, à 10:46
- Watael
Re : [Résolu] Changement dans interprétation regexp ?
salut,
find /media/Backup -type f -regextype posix-extended -regex '.*/[0-9]{8}-[0-9]{4}-Comp'
parser la sortie de ls peut être problématique; autant adopter les bonnes pratiques dès maintenant !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 01/07/2016, à 12:32
- Nym
Re : [Résolu] Changement dans interprétation regexp ?
Bonjour.
Je ne suis pas présentement devant mon PC, mais pour répondre à bertrand0 et pingouinux, c'est a priori mawk. Je n'y avais pas prêté attention, mais c'est effectivement sur la page de mawk que j'arrive quand je lance 'man awk'. Du coup pingouinux donne l'explication et une solution : installer gawk.
Par ailleurs je pense que je vais retenir la proposition de Watael pour améliorer ma ligne de commande.
Merci à tous les trois !
Nym
Ubuntu 18.04.1 LTS 64bits
Hors ligne
#6 Le 01/07/2016, à 12:33
- Nym
Re : [Résolu] Changement dans interprétation regexp ?
Nym a écrit :Bonjour.
J'utilise des répertoires de sauvegarde horodatés, sous la forme aaaammjj-hhmm-type où type donne le type de la sauvegarde sur 4 lettres (complète, incrémentale...).
Pour faire le tri dans ces répertoires et ne retenir que celui contenant la dernière sauvegarde complète, par exemple, je pensais utiliser le code suivant :ls /media/Backup | awk '/^[0-9]{8}\-[0-9]{4}\-Comp/ {print $0}'
Eh bien ça ne fonctionne pas alors que
ls /media/Backup | awk '/^[0-9]+\-[0-9]+\-Comp/ {print $0}'
et
ls /media/Backup | awk '/^[0-9]+-[0-9]+-Comp/ {print $0}'
fonctionnent parfaitement.
J'ai cherché dans les pages man de awk et egrep, mais je ne comprends pas pourquoi mes spécifications avec accolades ne sont pas interprétées.
Quelqu'un aurait-il une explication ?Si tu protège les accolades, ça ne change pas ?
Je dis ça comme ça, je n'utilise pas awk, mais dans les regexp, je progège toujours les accolades.
Je ne l'ai pas précisé, mais j'ai effectivement tenté de protéger les accolades avec \. C'est pareil.
Nym
Ubuntu 18.04.1 LTS 64bits
Hors ligne