entendendo a diferença entre “-C” e “-c” no utilitário tr (1)

2

De acordo com tr (1), manual -C significa:

Complement the set of characters in string1, that is ''-C ab'' includes every character except for 'a' and 'b'.

.. e -c significa:

Same as -C but complement the set of values in string1.

Agora, se eu usar -c no comando acima, funcionará como esperado:

$ echo $(dd if=/dev/urandom count=1 2>/dev/null | tr -dc 'A-Za-z0-9')
BAP0EctPYxpGgJmWYclqHj2eBWfZvVJs7nL6Y6YQiguGoZgziCceLe3TcyeV4uUi1R1yPW98s8LgiC8iNS1F60tEE2nXAHNi6L6IVS3CXBn94oPLGppxAgp
$ 

.. mas -C não:

$ echo $(dd if=/dev/urandom count=1 2>/dev/null | tr -dC 'A-Za-z0-9')
���hA����W���t�W��eu�C���W��o��A��xz�����M��p���x��2q����10O���������������p�R���t��I���c�8Z��Rq�9�L�Z��u����ot�n�T��n�nI��3i�yj�CuK��v�Ny�0�������i1�W�Lo�do�����TckL����i�rn��Wc��T���3����X��Z�M�e���I��J��I���A�5Y�����h���K���������ai������S����aZ�G���oab8��������4�g���G��g��0����I���H2�XGo���1�7���Ls�9H��7�b���Sf���E��Tv����mE�����3���l���S�88z��nl�p�f����w�E���Y�q�p���B�
$ 

Como entender isso set of characters vs set of values ?

    
por Martin 06.05.2013 / 13:24

1 resposta

4

Em uma localidade POSIX, os caracteres podem receber valores de 0 a 127.

tr -dc 'A-Za-z0-9'

Teria o complemento daqueles em valores de 0 a 255. Enquanto

tr -dC 'A-Za-z0-9'

Teria o complemento daqueles no conjunto de caracteres válidos (valores 0 a 128).

Então o primeiro seria como:

tr -d '
tr -d '
tr -dc 'A-Za-z0-9'
--03-03-7'
--03-03-7'

Enquanto o segundo seria como:

tr -dC 'A-Za-z0-9'
    
por 06.05.2013 / 13:53

Tags