Comportamento de corte estranho

0

Estou usando cut (GNU coreutils) 8.24 .

O comando: echo "TEST=test" | cut -d"=" -f2- outputs Ttest . Eu não acho que esse é o comportamento pretendido.

Estou usando errado ou há algo errado com meu cut ?

    
por Christian Stewart 31.07.2015 / 01:14

1 resposta

3

Os problemas de reprodução se resumem ao provedor de libc. Ou seja, parece que é um bug no uclibc; veja: link

Em determinadas circunstâncias, cortar imprime o primeiro caractere do campo 1 e todo o campo 2 quando solicitado a imprimir o campo 2 - assim, por exemplo:

printf "4123\t2\t3\t4\t5\n" | cut -f 2

imprime 42; não apenas 2. Eu corri o strace naquele corte e ele mostrou que o corte está imprimindo toda a linha.

O bug parece relacionado a como ele quer tratar linhas sem delimitadores; então um trabalho por enquanto está usando o sinalizador '-s'; assim:

printf "4123\t2\t3\t4\t5\n" | cut -f 2 -s

que imprime "2", como esperado.

Eu imagino que a maioria das pessoas correndo para isso está usando o buildroot; e eu recomendo modificar a configuração do uclibc de acordo com esse link. Principalmente isso significa apenas:

make uclibc-menuconfig
Select y for 'String and Stdio Support --> Provide a macro version of [getc|putc]'

observe que, como isso está alterando a implementação da libc; provavelmente é prudente também reconstruir basicamente tudo.

    
por 07.12.2015 / 18:49

Tags