$ echo ABC | awk '$0 ~ /^[ab]/' ABC $ echo ABC | awk '$0 ~ /^[aa]/' $ echo ABC | awk '$0 ~ /^a/' $
Tu vois. /[ab]/
capture A
, mais /[aa]/
ou /a/
ne le fait pas. Pourquoi?
C'est un problème de "localization", je pense.
Dans ma locale, it_IT, l'extrait suivant
if [[ a < A ]]; then echo "a < A" elif [[ a > A ]]; then echo "a > A" else echo "a = A" fi if [[ b < A ]]; then echo "b < A" elif [[ b > A ]]; then echo "b > A" else echo "b = A" fi
montre
a < A b > A
de sorte que A
est (étonnamment) entre a
et b
, donc dans la gamme.
Essayez d'exécuter
echo ABC | LC_COLLATE=C awk '$0 ~ /^[ab]/'
modifier
la command suivante affiche l'ordre de classment dans votre environnement local:
echo $(LC_COLLATE=C printf '%s\n' {A..z} | sort)
la sortie sur ma machine est
` ^ _ [ ] a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z
(ne peut pas comprendre à partir de la page de manuel de bash si les expressions de séquence sont développées dans l'ordre de classment des parameters régionaux ou non, cela ne semble pas).