Visualizar arquivo de texto e realçar números

3

Gostaria de ver um arquivo de texto no terminal e destacar seus números. Algo como eu recebo quando eu abro com gedit . Não consegui fazer isso com less , cat , vim ou outros visualizadores / editores.

P.S. Minha pergunta é simples, mas não consegui encontrar as palavras-chave corretas para uma pesquisa significativa.

Solução DIY

Solução A

Corresponda todos os números e destaque-os, imprima todas as linhas:

egrep --colour=always '[-+]?[0-9]*[\.e]?[0-9]|$'

Eu acho que vou simplesmente apelar para isso. Ainda estou me perguntando se há uma opção padrão.

Editar: adicionando suporte para exponencial e , tnx para @ αғsнιη.

Solução B

Tudo bem, minha solução final abaixo

grep -P --colour=always '(?:^|(?<=[\, ;\-\+\*\/]))[-+]?[0-9]*[\.eE]?[0-9]+|$'

Ele procura por caracteres de separação ou início de linha e combina uma grande quantidade de formatos numéricos e o fim da linha (para que cada linha seja impressa).

Finalmente, dois aliases úteis v iew e l ess- v iew:

alias v="grep --colour=always -P '(?:^|(?<=[\, ;\-\+\*\/]))[-+]?[0-9]*[\.eE]?[0-9]+|$'"
function lv {                                                                    
    v $1 | less -R                                                               
}

Solução C

Aqui, uma expressão regex melhor (para usar aspas simples da Solução B ):

(?<![\w\.])[-+]?[0-9]*[\.eE]?\-?[0-9]+|$

Esta solução é responsável por quaisquer símbolos não alfanuméricos e de separação de pontos. O anterior era desprovido de generalidade.

Editar: adicionar -nT a grep mostra números de linha alinhados. Edit2: conta para expoentes negativos, adicionando \-? .

TL; DR

Cole isso em ~/.bashrc e use as colunas v , lv , cv a , menos visualização e -view seus arquivos de texto:

# Highlight numbers when displaying text files
alias v="grep --colour=always -nTP '(?<![\w\.])[-+]?\-?[0-9]*[\.eE]?[0-9]+|$'"
# Send v output to less
function lv {
    v $1 | less -R
}
# Convert CSV to TSV and send to lv
function cv {
    column -ts, $1 | lv
}

Editar: adicione um atalho de leitura de arquivo CSV e comentários.

    
por Atcold 12.10.2017 / 20:53

3 respostas

8

Combine também os sinais +/- e e também.

 grep -E --color '[-+\.]?[0-9](|[eE][-+]?[0-9]|$)'

Isto irá corresponder abaixo de vários números.

12345
-12345
+12345
.12345
12.345
12345.
123e45
123E45
123E+45
123E-45
123e+45
123e-45
    
por 12.10.2017 / 20:58
4

com vim :

:syn on
:syn match Number '\v[-+]?\d*\.?\d+([eE][-+]?\d+)?'

Isso se você quiser apenas números (pelo menos este formato de números, você também pode querer adicionar 0x123, 1,23, 0x1ap-2, VII, 1.000.000, ...) em destaque. Muitos marcadores de sintaxe enviados com vim para idiomas diferentes também destacam números como entendidos pela linguagem correspondente.

Se você fizer um:

grep -F '[eE' /usr/share/vim/vim*/syntax/*

você verá todos os idiomas que possuem algumas formas de números, incluindo aqueles com notação científica realçada por vim .

Você também pode decidir em que contexto esses números podem ser destacados, como o 1 deve ser destacado em ls.1 , PS1 , 1+2 , -1- ? O 1e2 ou 2e3 ou nenhum deve ser destacado em 1e2e3 , etc?

    
por 12.10.2017 / 21:17
1

Algumas outras possibilidades:

Colorize, color text

        0) reset-no-color (local), Emits sequence to remove (stray) color
           echo -e "\[3[0;00m\]"

        1) coforma (local), color for match, add specified color for pattern
           matches

        2) coteli (local), insert ANSI color codes around line blocks,
           COlor TExt LInes

        3) spc, "supercat", colorize and print to standard output,
           general (but therefore complex) rules for coloring.
           Found in Debian repository and at:
           https://github.com/tanderson92/supercat

        4) ansifilter, convert color codes, etc., to HTML, BBcode, others
           http://www.andre-simon.de/

        5) my-highlight (local)
           http://unix.stackexchange.com/questions/46562/how-do-you-colorize-only-some-keywords-for-a-bash-script

        6) my-hilite (local)
           http://unix.stackexchange.com/questions/46562/how-do-you-colorize-only-some-keywords-for-a-bash-script

        7) hh, easy highlighting, wrapper around ack
           https://github.com/paoloantinori/hhighlighter

        8) pygmentize, parse and colorize program source file
           In Debian package python-pygments

Por exemplo, eu corri:

spc data1

com um arquivo de configuração de .spcrc:

Cyan                 cya     t ([0-9]+)

para obter:

Mike Brady 2
Carol 3.1415 Brady
77 Greg Brady
Marcia Brady

Com dígitos em ciano - desculpe, não vejo como obter o fórum para renderizar a cor do BBCode ou HTML ou ... - sugestões serão apreciadas.

Felicidades ... felicidades, drl

    
por 12.10.2017 / 22:09

Tags