Por que as letras maiúsculas são incluídas em um intervalo de letras minúsculas em um regex awk?

7
$ echo ABC | awk '$0 ~ /^[a-b]/'
ABC
$ echo ABC | awk '$0 ~ /^[a-a]/'
$ echo ABC | awk '$0 ~ /^a/'
$ 

Você vê. /[a-b]/ captura A , mas /[a-a]/ ou /a/ não. Por quê?

    
por Cheng 24.08.2011 / 13:17

1 resposta

6

É um problema de "localidade", eu acho.

Na minha localidade, it_IT, o seguinte snippet

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

mostra

a < A
b > A

para que A seja (surpreendentemente) entre a e b , portanto, no intervalo.

Tente executar

echo ABC | LC_COLLATE=C awk '$0 ~ /^[a-b]/'

Editar

o seguinte comando mostra a ordem de ordenação na sua localidade:

    echo $(LC_COLLATE=C printf '%s\n' {A..z} | sort)

a saída da minha máquina é

    ' ^ _ [ ] 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

(não é possível entender a partir da página de manual do bash se expressões de sequência são expandidas na ordem de ordenação local ou não; parece que não).

    
por 24.08.2011 / 14:04
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warning – yii\base\ErrorException

PHP Startup: Unable to load dynamic library 'memcached.so' (tried: /usr/lib/php/20190902/memcached.so (/usr/lib/php/20190902/memcached.so: undefined symbol: igbinary_serialize), /usr/lib/php/20190902/memcached.so.so (/usr/lib/php/20190902/memcached.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '783618',
    'url' => 'why-are-capital-letters-included-in-a-range-of-lower-case-letters-in-an-awk-rege',
];

$_COOKIE = [
    'advanced-frontend' => '0beie8kg9rshj46ia7s6qfd6vj',
    '_csrf-frontend' => 'c6a2ae3ba3909e3ab216efa555807ee2f4115f77e31b36e4462f9a7ee95ea1c6a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"zV7PqiDv0Q6DsQP6dChZ-onxTL3MOD3L";}',
];

$_SESSION = [
    '__flash' => [],
];