Como colorir a saída do diff?

11

Eu sou novo no unix Eu queria formatar os arquivos Unix condicionalmente, atualmente estou trabalhando no comando diff e queria saber se é possível formatar o texto da saída do comando diff .

Exemplo:

Matched values should be displayed in green.
Unmatched values should be displayed in red.

Suponha que eu tenha dois arquivos file1 e file2 e meu comando seja diff file1 file2 .

Agora, eu queria que, supondo que a saída contivesse 5 incompatibilidade, essa incompatibilidade deveria ser exibida em vermelho. Como conseguir isso usando o unix?

Em suma "Alterar cor para vermelho para a saída do comando diff para valores incompatíveis"

    
por Aman 16.04.2015 / 12:11

10 respostas

16

Se você tiver acesso ao GNU diff , poderá usar o --X-group-format options para obter esse efeito sem quaisquer ferramentas adicionais:

diff --old-group-format=$'\e[0;31m%<\e[0m' \
     --new-group-format=$'\e[0;31m%>\e[0m' \
     --unchanged-group-format=$'\e[0;32m%=\e[0m' \
     file1 file2

Que usa códigos de escape de cor ANSI para obter vermelho e verde, com ANSI-C citando no shell para acessar o \e escapes.

--old-group-format e --new-group-format identificam linhas não correspondentes e inserem-nas entre códigos de redefinição vermelha e colorida usando %< e %> , enquanto --unchanged-group-format insere linhas correspondentes entre os códigos verde e de redefinição.

Você também pode usar --old-line-format (etc ), à custa de fugas de cores redundantes em todas as linhas: --old-line-format=$'\e[0;31m%L\e[0m' .

    
por 16.04.2015 / 12:35
12

diff --color option foi adicionado GNU diffutils 3.4 (2016-08-08)

Esta é a implementação padrão de diff na maioria das distros, que em breve estará recebendo.

No 3.5, é assim:

com:

diff--color-u\<(seq6|sed's/$/a/')\<(seq8|grep-Ev'^(2|3)$'|sed's/$/a/')

Tambémsoliciteiodiffnoníveldapalavraapartirdediff-highlightem: [ Diffutils-devel] Adicione uma bandeira para produzir saída colorida como diff-h do git | lists.gnu.org

Aparentemente adicionado em commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (mar 2015).

    
por 20.01.2017 / 20:34
3

Experimente colordiff file1 file2

Availability of colordiff with your Linux/BSD distribution

Those running Debian or Ubuntu (or any of their derivatives) can probably just use "apt-get install colordiff" to download and install; colordiff is also packaged for a number of other Linux, UNIX and BSD distributions and operating systems.

(citação do link )

    
por 07.02.2017 / 11:04
2

Colorido, nível de palavra diff ouput

Veja o que você pode fazer com o script abaixo e diff-highlight :

#!/bin/sh-eu#Usediff-highlighttoshowword-leveldifferencesdiff-U3--minimal"$@" |
  sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
  diff-highlight

(Crédito para @resposta do retracile para o sed destaque)

    
por 05.10.2016 / 06:11
0

Você deve dar uma olhada no comando hl disponível no github: git clone http://github.com/mbornet-hl/hl e em: link

hl é um comando do Linux escrito em C, especialmente projetado para colorir um arquivo de texto ou a saída de um comando. Você pode usar até 42 cores simultaneamente e usar um arquivo de configuração para simplificar as linhas de comando. Você pode colorir a saída de cada comando que pode ser canalizado para outro. E se você souber o que são expressões regulares, será muito fácil de usar. Você pode usar a página man para entender como usá-la.
hl é muito fácil de usar e configurar. Você ainda pode usar o script hl_generic para colorir a saída de comandos sem modificar sua sintaxe.
Você pode, por exemplo, colorir a saída do comando diff apenas digitando seu comando usual:

diff file1 file2

Se precisar de ajuda, envie-me um e-mail.
Atenciosamente.

    
por 09.11.2015 / 00:15
0

Ou você pode usar

1. diff --color=auto file1 file2

2. colordiff file1 file2

3. Meu favorito: git diff file1 file2 implementado conforme abaixo:

Eu uso e recomendo atualmente é , usando git diff ou canalizando sua saída com colordiff usando:

diff() { git diff --no-index "$1" "$2" | colordiff; }

    
por 28.11.2017 / 18:13
0

Apenas uma nota: para obter a saída "lado a lado", você precisa "--color = always". Você também pode paginar com menos e manter a saída colorida:

diff -y --color=always file1 file2 | less -R

E ainda outra dica: tente manter a opção "--color = always" no final. Razão? Com o dmesg do util-linux 2.27.1:

dmesg --human --color=always | less -R    # works
dmesg --color=always --human | less -R    # doesn't work
    
por 18.03.2018 / 12:44
0

Existe uma ferramenta realmente interessante construída com python no Github no momento chamada icdiff . Produz bons resultados coloridos que também são “severos”. Eu uso o tempo todo, vale a pena conferir.

    
por 18.03.2018 / 14:43
0

Este script usa a pré-versão padrão 3.4 diff (deve funcionar com qualquer versão do diff) e colori a saída sem alterar o formato de saída de forma alguma. Ele funciona com a versão mais recente do RHEL (versão 7.5), que possui a versão 3.3 do GNU diff. Basta colocá-lo em seu diretório ~ / bin ou em qualquer outro lugar em seu caminho (sugiro chamá-lo de "cdiff").

#!/bin/bash
file1color="$(tput setaf 1)"
file2color="$(tput setaf 2)"
sepcolor="$(tput setaf 6)"
reset="$(tput sgr0)"
diff $* |sed -e "s/^\(<.*\$\)/$file1color\1$reset/;s/^\(>.*\$\)/$file2color\1$reset/;s/^\(---\$\)/$sepcolor\1$reset/"
    
por 31.07.2018 / 22:26
0

se você tiver o vim instalado, você pode fazer diff file1 file2 | vim -

O Vim reconhecerá o formato do diferencial e dará uma coloração adequada. O traço no final é deixar o vim aceitar a entrada do comando diff.

    
por 13.08.2018 / 01:59

Tags