Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Classes de caracteres POSIX

Os intervalos de caracteres tradicionais são uma forma eficaz e de fácil compreensão de lidar com o problema de especificar conjuntos de caracteres rapidamente. Infelizmente, eles nem sempre funcionam. Embora não tenhamos encontrado nenhum problema com o uso de grep até agora, podemos ter problemas ao usar outros programas.

De volta ao Capítulo 4, vimos como os curingas são usados ​​para realizar a expansão do nome do caminho. Nessa discussão, dissemos que os intervalos de caracteres podem ser usados ​​de maneira quase idêntica à forma como são usados ​​em expressões regulares, mas aqui está o problema:



[me @ linuxbox ~] $ ls / usr / sbin / [ABCDEFGHIJKLMNOPQRSTUVWXYZ] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / NetworkManager

[me @ linuxbox ~] $ ls / usr / sbin / [ABCDEFGHIJKLMNOPQRSTUVWXYZ] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / NetworkManager


(Dependendo da distribuição do Linux, obteremos uma lista diferente de arquivos, possivelmente uma lista vazia. Este exemplo é do Ubuntu). Este comando produz o resultado esperado-uma lista apenas dos arquivos cujos nomes começam com uma letra maiúscula, mas:


[me @ linuxbox ~] $ ls / usr / sbin / [AZ] *

/ usr / sbin / biosdecode

/ usr / sbin / chat

/ usr / sbin / chgpasswd

/ usr / sbin / chpasswd

/ usr / sbin / chroot

/ usr / sbin / cleanup-info

/ usr / sbin / reclamar

/ usr / sbin / console-kit-daemon

[me @ linuxbox ~] $ ls / usr / sbin / [AZ] *

/ usr / sbin / biosdecode

/ usr / sbin / chat

/ usr / sbin / chgpasswd

/ usr / sbin / chpasswd

/ usr / sbin / chroot

/ usr / sbin / cleanup-info

/ usr / sbin / reclamar

/ usr / sbin / console-kit-daemon


com este comando obtemos um resultado totalmente diferente (apenas uma lista parcial dos resultados é mostrada). Por que é que? É uma longa história, mas aqui está a versão curta:

Na época em que o Unix foi desenvolvido, ele só conhecia caracteres ASCII, e esse recurso reflete esse fato. Em ASCII, os primeiros 32 caracteres (números de 0 a 31) são códigos de controle (coisas como tabulações, retrocessos e retornos de carro). Os próximos 32 (32-63) contêm caracteres imprimíveis, incluindo a maioria dos caracteres de pontuação e os numerais de zero a nove. Os próximos 32 (números 64-95) contêm as letras maiúsculas e mais alguns símbolos de pontuação. O 31 final (números 96-127) contém as letras minúsculas e ainda mais símbolos de pontuação. Com base neste arranjo, os sistemas que usam ASCII usaram um ordem de agrupamento que parecia com isto:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz Isso difere da ordem de dicionário adequada, que é assim: aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqXyRsStTuUvWx

À medida que a popularidade do Unix se espalhou para além dos Estados Unidos, cresceu a necessidade de oferecer suporte a caracteres não encontrados no inglês dos Estados Unidos. A tabela ASCII foi expandida para usar oito bits completos, adicionando os caracteres de número 128-255, que acomodavam muitos outros idiomas. Para oferecer suporte a essa capacidade, os padrões POSIX introduziram um conceito chamado de local, que pode ser ajustado para selecionar o conjunto de caracteres necessário para um determinado local. Podemos ver a configuração de idioma do nosso sistema usando este comando:



[me @ linuxbox ~] $ echo $ LANG

pt_US.UTF-8

[me @ linuxbox ~] $ echo $ LANG

pt_US.UTF-8


Com essa configuração, os aplicativos compatíveis com POSIX usarão uma ordem de agrupamento de dicionário em vez de uma ordem ASCII. Isso explica o comportamento dos comandos acima. Uma gama de caracteres de [AZ] quando interpretado na ordem do dicionário inclui todos os caracteres alfabéticos exceto a minúscula “a”, daí nossos resultados.

Para contornar parcialmente esse problema, o padrão POSIX inclui várias classes de caracteres que fornecem intervalos úteis de caracteres. Eles são descritos na tabela be-


baixo:

Tabela 19-2: Classes de caracteres POSIX


Descrição da classe de personagem

Descrição da classe de personagem

[: alnum:] Os caracteres alfanuméricos. Em ASCII, equivalente a:

[A-Za-z0-9]


imagem

[:palavra:] O mesmo que [: alnum:], com a adição do sublinhado (_) personagem.


imagem

[: alfa:] Os caracteres alfabéticos. Em ASCII, equivalente a:

[A-Za-z]


imagem

[: em branco:] Inclui os caracteres de espaço e tabulação.


imagem

[: cntrl:] Os códigos de controle ASCII. Inclui os caracteres ASCII de 0 a 31 e 127.


imagem

[: dígito:] Os numerais de zero a nove.


imagem

[: gráfico:] Os caracteres visíveis. Em ASCII, inclui caracteres 33

através do 126.


imagem

[: inferior:] As letras minúsculas.


imagem

[: punct:] Os caracteres de pontuação. Em ASCII, equivalente a:

[-! "# $% & '() * +,. / :; <=>? @ [\\\] _` {|} ~]


imagem

[: imprimir:] Os caracteres imprimíveis. Todos os personagens em [:gráfico:]

mais o caractere de espaço.


imagem

[: espaço:] Os caracteres de espaço em branco, incluindo espaço, tabulação, carro

retorno, nova linha, guia vertical e alimentação de formulário. Em ASCII, equivalente a:

[\ t \ r \ n \ v \ f]


imagem

[: maiúsculas:] Os caracteres maiúsculos.


imagem

[: xdigit:] Caracteres usados ​​para expressar números hexadecimais. Em ASCII, equivalente a:

[0-9A-Fa-f]


imagem


Mesmo com as classes de caracteres, ainda não há uma maneira conveniente de expressar intervalos parciais, como [AM].

Usando classes de caracteres, podemos repetir nossa lista de diretórios e ver um resultado melhorado:


[me @ linuxbox ~] $ ls / usr / sbin / [[: superior:]] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / NetworkManager

[me @ linuxbox ~] $ ls / usr / sbin / [[: superior:]] *

/ usr / sbin / MAKEFLOPPIES

/ usr / sbin / NetworkManagerDispatcher

/ usr / sbin / NetworkManager


imagem

Lembre-se, entretanto, de que este não é um exemplo de expressão regular, mas sim o shell que executa a expansão do nome do caminho. Mostramos isso aqui porque as classes de caracteres POSIX podem ser usadas para ambos.


Revertendo para a ordem de agrupamento tradicional

Você pode optar por fazer com que seu sistema use a ordem de agrupamento tradicional (ASCII) alterando o valor do GRANDE variável de ambiente. Como vimos acima, o GRANDE variável contém o nome do idioma e conjunto de caracteres usados ​​em sua localidade. Este valor foi determinado originalmente quando você selecionou um idioma de instalação como seu Linux foi instalado.

Para ver as configurações de localidade, use o local comando:

[me @ linuxbox ~] $ local LANG = en_US.UTF-8 LC_CTYPE = "en_US.UTF-8" LC_NUMERIC = "en_US.UTF-8" LC_TIME = "en_US.UTF-8" LC_COLLATE = "en_US.UTF-8" LC_MONETARY = "en_US.UTF- 8 "LC_MESSAGES =" en_US.UTF-8 "LC_PAPER =" en_US.UTF-8 "LC_NAME =" en_US.UTF-8 "LC_ADDRESS =" en_US.UTF-8 "LC_TELEPHONE =" en_US.UTF-8 "LC_MEASUREMENT =" en_US.UTF-8 "LC_IDENTIFICATION =" en_US.UTF-8 "LC_ALL =

Para alterar a localidade para usar os comportamentos tradicionais do Unix, defina o GRANDE variável para POSIX:

[me @ linuxbox ~] $ export LANG = POSIX

Observe que essa alteração converte o sistema para usar o inglês dos Estados Unidos (mais especificamente, ASCII) para seu conjunto de caracteres, portanto, certifique-se de que isso seja realmente o que você deseja.


imagem

Você pode tornar esta mudança permanente adicionando esta linha a você .bashrc

arquivo:

export LANG = POSIX


Top OS Cloud Computing na OnWorks: