O problema é claro, com column
não diferenciando entre caracteres de impressão e não-impressão, bash
contorna isso em seu prompt ( PS1
) com seu recurso de escape \[ \]
, não sei qualquer outra coisa que faça exatamente isso.
Eu tentei um hack rápido e desagradável, já que o seu campo problemático está no início da linha, mova-o para o fim , mas você se depara com problemas de preenchimento / alinhamento que não são facilmente resolvidos usando utilitários comuns.
ls -l --color | rev | column -t | rev # not a useful solution
Se você tiver a instalação do módulo perl HTML::FromANSI
, ela tem um script ansi2html
útil:
ls -l --color | ansi2html -f
Isso só leva você para o meio do caminho, agora você precisa alinhar a saída HTML ...
Existe uma solução simples (embora leve e pesada) com HTML como intermediário: o layout das tabelas HTML é efetivamente o que você está tentando fazer.
Isso usa ansifilter do Andre Simon , por exemplo:
ls -l --color | ansifilter -fH
Isso converte seqüências ANSI em HTML ( <span style="..."></span>
), então isso pode ser descartado usando um navegador com capacidade de texto em modo ANSI como elinks .
Se o HTML incompleto for um problema, você pode executar hxclean
ou htmltidy
para limpar o HTML antes de passá-lo para um navegador.
ls -l --color | ansifilter -fH | perl table.pl | elinks -dump -dump-color-mode 1
Você deve ser capaz de usar elinks ou w3m para isso
O script table.pl
se divide no espaço em branco e adiciona as tags relevantes da tabela HTML para obter a formatação desejada:
print "<table>\n";
while (<>) {
print "<tr><td>" .
join("</td><td>", split(/((?!<[^>]+)\s+(?![^<]+>))/) ) .
"</td></tr>\n";
}
print "</table>\n";
Não apenas se divide em nenhum espaço em branco, ele se divide em espaço em branco que não está dentro de '<' '>' colchetes angulares para que não quebre a tag <span>
. Essa não é uma boa maneira de analisar HTML, mas deve ser suficiente para o tipo de entrada restrita aqui.
Você pode precisar (eu fiz) para definir ou substituir as cores padrão, ou adicioná-las ao seu arquivo ~/.elinks/elinks.conf
:
set document.colors.use_document_colors = 1
set document.colors.text = "#000000"
set document.colors.background = "#ffffff"
Certifique-se de usar os elinks mais recentes (0.12.x), versões anteriores não suportam saída de cores ANSI.