Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/04/2014, à 11:43

claudius01

[Résolu] [gawk + regex] Comportement différent de [A-Z] et [[:upper:]]

Bonjour,

Je soumets à votre sagacité ce comportement différent.

Le fichier de données à traiter :

$ cat regex.txt
012abcABC
012aAbBcC

Le script qui réalise une extraction à partir de la 1ère lettre majuscule :

$ cat regex.sh
echo "Extract with the regex '[:upper:]'"
gawk '{n = match($0, /[[:upper:]]/); printf("\"%s\" => n = %s extract = \"%s\"\n", $0, n, substr($0, n));}' regex.txt

echo
echo "Extract with the regex 'A-Z'"
gawk '{n = match($0, /[A-Z]/); printf("\"%s\" => n = %s extract = \"%s\"\n", $0, n, substr($0, n));}' regex.txt

Le résultat  des 2 comportements :

$ ./regex.sh
Extract with the regex '[:upper:]'
"012abcABC" => n = 7 extract = "ABC"
"012aAbBcC" => n = 5 extract = "AbBcC"

Extract with the regex 'A-Z'
"012abcABC" => n = 5 extract = "bcABC"            <= Mauvaise extraction ;-(
"012aAbBcC" => n = 5 extract = "AbBcC"

Version de gawk : GNU Awk 3.1.8 / Ubuntu 12.04 LTS


Cordialement, A+
--
Claudius

Dernière modification par claudius01 (Le 10/04/2014, à 13:16)

Hors ligne

#2 Le 10/04/2014, à 12:04

credenhill

Re : [Résolu] [gawk + regex] Comportement différent de [A-Z] et [[:upper:]]

hello
pas de problème

$ ./regex.sh
Extract with the regex '[:upper:]'
"012abcABC" => n = 7 extract = "ABC"
"012aAbBcC" => n = 5 extract = "AbBcC"

Extract with the regex 'A-Z'
"012abcABC" => n = 7 extract = "ABC"
"012aAbBcC" => n = 5 extract = "AbBcC"
$ 
$ awk --version | head -1
GNU Awk 3.1.6

Hors ligne

#3 Le 10/04/2014, à 12:07

pingouinux

Re : [Résolu] [gawk + regex] Comportement différent de [A-Z] et [[:upper:]]

Bonjour,
C'est un problème de "collating sequence". Pour avoir le bon comportement dans les deux cas :

LC_COLLATE="C" ./regex.sh

Ajouté : Tu peux aussi faire ceci

grep -o '[A-Z].*' regex.txt

Dernière modification par pingouinux (Le 10/04/2014, à 12:14)

Hors ligne

#4 Le 10/04/2014, à 13:14

claudius01

Re : [Résolu] [gawk + regex] Comportement différent de [A-Z] et [[:upper:]]

Merci à tous les 2,

Effectivement 'LC_COLLATE="C" ./regex.sh' réalise correctement l'extraction.
En //, j'ai cherché et trouvé cela : Regexp Ranges and Locales: A Long Sad Story qui explique le pourquoi du comment.


Merci encore, A+
--
Claudius

Hors ligne