Caractere da guia de saída na janela do terminal

4

Como faço para a saída de um caractere de tabulação (ASCII hex 0x09) na janela do terminal?

Em todos os meus experimentos, o caractere de tabulação é alterado para espaços quando aparece no terminal. Por exemplo,

$ echo -e "xx\t\tyy"
xx              yy

que não é o que eu quero, pois o espaço entre xx e yy é preenchido com 14 espaços e não com 2 caracteres de tabulação. Eu tentei stty tab0 , stty tab1 , stty tab2 e stty tab3 , mas todos deram o mesmo resultado.

Estou usando o Terminal GNOME 2.16.0 e a versão 5.9 do Red Hat Enterprise Linux Client.

Antecedentes: Eu quero mouse selecione o texto no terminal e cole no Excel. Quando eu faço isso do Emacs (com as guias 0x09 entre os campos), os campos acabam em colunas diferentes. Eu gosto disso e quero o mesmo comportamento ao copiar e colar do terminal. No entanto, no momento, todos os campos acabam como uma string na primeira coluna. Quando eu tenho espaços (0x20) entre os campos no Emacs, o comportamento é o mesmo de copiar e colar do terminal.

    
por Axel Bregnsbo 20.11.2016 / 11:31

3 respostas

7

Tab não é um caractere imprimível. Tab é um caractere de controle que geralmente avança o cursor (mas não no final da linha), deixando os caracteres que estão pulando inalterados.

gnome-terminal (e outros emuladores vte -based) tem um hack especial que tenta preservar as abas para propósitos de copiar e colar, no entanto, ele ainda os perde em um linebreak suave. Outros emuladores também podem ter esse tipo de invasão, mas normalmente não o fazem.

Veja também a conversa no link .

    
por 20.11.2016 / 11:48
3

Se você usar

printf "xx\t\tyy"

que deve se expandir para um caractere de tabulação real. O comportamento de echo em relação a bash foi errático. Eu testei bash no Debian 7 e descobri que nem echo -t nem /bin/echo -t deu uma aba, enquanto printf fez (redirecionando a saída para um arquivo para ter certeza). Aqui está o script:

#!/bin/bash
echo -t "xx\t\tyy"
echo done
/bin/echo -t "xx\t\tyy"
echo done
echo "xx\t\tyy"
echo done
/bin/echo "xx\t\tyy"
echo done
printf "xx\t\tyy"
echo done

e saída para o terminal:

-t xx\t\tyy
done
-t xx\t\tyy
done
xx\t\tyy
done
xx\t\tyy
done
xx              yydone

Isso é diferente do problema adicional de colocar caracteres na tela do terminal. Como regra, a maioria dos terminais só tem espaços selecionáveis para recortar / colar (independente de você imprimir uma aba ou não). Para isso -

por 20.11.2016 / 11:39
2

Se tudo o que você quer é colocar o resultado em sua área de transferência para poder colá-lo no Excel, você pode tentar usar algo como xclip. Note que você pode ter que instalá-lo. Eu não sei o que o argumento '-t' faz em sua distribuição Linux como eu nunca vi, mas pessoalmente eu preciso adicionar '-e' para permitir caracteres de escape. Mas com o xclip eu posso escrever algo assim.

echo -e "xx\t\tyy" | xclip -selection c

Agora posso pressionar ctrl + v e passar para o Excel. Se o eco não funcionar, você pode tentar 'printf'.

Se você não quiser digitar tudo isso toda vez, poderá criar um alias.

alias xclip="xclip -selection c"
echo -e "xx\t\tyy" | xclip

E, se nada mais, você pode sempre redirecionar a saída que deseja para um arquivo e apenas abri-lo em um editor de texto e copiar o que você precisa, pois as guias devem permanecer como guias no arquivo.

echo -e "xx\t\tyy" > tmpfile.txt
    
por 20.11.2016 / 21:49