Bonjour à tous, Baptiste Daroussin a écrit :
Le 12 mars 2010 11:42, Daniel Caillibaud <ml@lairdutemps.org <mailto:ml@lairdutemps.org>> a écrit :
Bonjour,
Si y'a toujours un peu de lumière par ici, j'ai une question bête de regex
Pourquoi la 1re ligne, avec une majuscule, sort quand même avec awk (alors que sed donne le comportement que j'attendais) ?
$ echo 'Un test > avec une autre ligne' |awk '/^[a-z ]+$/ {print $0}' Un test avec une autre ligne
$ echo 'Un Test > avec une autre ligne' |sed -nre '/^[a-z ]+$/ p' avec une autre ligne
Tout simplement parce qu'il semble soit s'agir encore d'un bug gnu awk soit d'une fonctionnalité/extension GNU awk parce que ça marche parfaitement comme attendu (cad comme avec ton sed) en utilisant nawk.
Je pencherai pour le bug parce que :
résultat foireux en gawk 3.1.5 sous linux
résultat correct avec gawk 3.1.6, mawk 1.3.3 et nawk (celui de base) 20070501 sous freebsd
À cause des regles de collation en français ? ou les minuscules et les majuscules ont le même rang. exple : touch a A b B env LANGUAGE=fr_FR.UTF-8 LANG=fr_FR.UTF-8 ls -l a b A B -rw-r--r-- 1 cmartin mrg 0 2010-03-12 13:57 a -rw-r--r-- 1 cmartin mrg 0 2010-03-12 13:57 A -rw-r--r-- 1 cmartin mrg 0 2010-03-12 13:57 b -rw-r--r-- 1 cmartin mrg 0 2010-03-12 13:57 B env LANGUAGE=C LANG=C ls -l a b A B -rw-r--r-- 1 cmartin mrg 0 Mar 12 13:57 A -rw-r--r-- 1 cmartin mrg 0 Mar 12 13:57 B -rw-r--r-- 1 cmartin mrg 0 Mar 12 13:57 a -rw-r--r-- 1 cmartin mrg 0 Mar 12 13:57 b de la même manière : echo 'Un test une autre ligne' | env LANGUAGE=fr_FR.UTF-8 LANG=fr_FR.UTF-8 awk '/^[a-z]/' Un test une autre ligne echo 'Un test une autre ligne' | env LANGUAGE=C LANG=C awk '/^[a-z]/' une autre ligne La prise en compte des réglages internationnaux est-elle correcte ou buggée (ou pourquoi pas totalement idiote) ? Je n'arrive pas vraiment à me décider (encore que je penche pour la dernière solution) De toutes les façons, travailler avec des réglages de langue autre que C avec awk c'est courir au suicide (voir aussi http://cli.asyd.net/home/filtres/awk/presentation#langage_awk ) perso, quand je fais du awk, j'utilise tjrs une fonction shell du genre: Awk() { env LANGUAGE=C LANG=C LC_ALL=C LC_NUMERIC=C awk "$@" } /cm