Eu queria formatar os arquivos Unix condicionalmente, atualmente estou trabalhando no diff
comando e queria saber se é possível formatar o texto da diff
saída do comando.
Exemplo:
Os valores correspondentes devem ser exibidos em verde.
Valores incomparáveis devem ser exibidos em vermelho.
Suponha que eu tenho dois arquivos file1
e file2
e meu comando édiff file1 file2
.
Agora eu queria que suponha que a saída contenha 5 incompatibilidades, em seguida, essas incompatibilidades devem ser exibidas na cor vermelha. Como conseguir isso usando o unix?
Em resumo "Altere a cor para vermelho para a saída do comando diff para valores que não correspondem"
Respostas:
diff --color
opção foi adicionada GNU diffutils 3.4 (08-08 2016)Essa é a
diff
implementação padrão na maioria das distribuições, que em breve será obtida.No 3.5, é assim:
com:
Também solicitei diff de nível de palavra a partir de
diff-highlight
: [Diffutils-devel] Adicione um sinalizador para produzir saída colorida como diff-h do git | lists.gnu.orgAparentemente adicionado ao commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (março de 2015).
fonte
alias diff='diff --color=auto'
Se você tiver acesso ao GNU,
diff
poderá usar suas--X-group-format
opções para obter esse efeito sem nenhuma ferramenta adicional:Que usa códigos de escape de cores ANSI para ficar vermelho e verde, com ANSI-C entre aspas no shell para acessar os
\e
escapes.--old-group-format
e--new-group-format
identificar linhas não correspondentes e inseri-los entre os códigos de reset vermelhos e de cor utilizando%<
e%>
, enquanto--unchanged-group-format
inserções correspondentes linhas entre códigos de verde e de reinicialização.Você também pode usar
--old-line-format
(etc), à custa de fugas cor redundantes em cada linha:--old-line-format=$'\e[0;31m%L\e[0m'
.fonte
diff
.Experimentar
colordiff file1 file2
(Citação de http://www.colordiff.org/ )
fonte
diff --color=auto
só foi colourising marcadores de linha e a primeira linha de cada+
/-
seção. A tubulaçãoless -SR
facilita a navegação.Colorido, palavra de nível
diff
ouputAqui está o que você pode fazer com o script abaixo e o diferencial :
(Agradecemos a resposta de @ retracile pelo
sed
destaque)fonte
Você deve dar uma olhada no
hl
comando disponível no github:git clone http://github.com/mbornet-hl/hl
e em: http://www.flashnux.com/notes/page_000022_US.htmlhl
é 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 usá-lo. Você pode usar aman
página 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 dos comandos sem modificar sua sintaxe.Você pode, por exemplo, colorir a saída do
diff
comando digitando seu comando usual:Se precisar de ajuda, envie-me um e-mail.
Saudações.
fonte
Existe uma ferramenta realmente interessante criada com o python no Github no momento chamada
icdiff
. Produz impressões coloridas agradáveis, que também são sensíveis à "gravidade". Eu uso o tempo todo, vale a pena conferir.fonte
Ou você pode usar
1
diff --color=auto file1 file2
2)
colordiff file1 file2
3.My Favorite:
git diff file1 file2
implementado como abaixo:Atualmente, eu uso e recomendo que você use
git diff
ou envie sua saídacolordiff
usando:diff() { git diff --no-index "$1" "$2" | colordiff; }
fonte
git diff --no-index
mas acho que os arquivos precisam ser procurados. (Pelo menos, não funciona com substituição processo de festa para mim)git diff
há muito tempo e o arquivo é procurável para mim, caso contrário não haveria utilidade em fazê-lo corretamente.diff --color <(ls | head -n+3) <(ls | tail -n +5)
mas não comgit diff
. É certo que não é um caso comum ou muito difícil de contornar.Apenas uma observação: 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:
E ainda outra dica: tente manter a opção "--color = always" no final. Razão? Com o dmesg do util-linux 2.27.1:
fonte
Este script usa o diff padrão anterior à versão 3.4 (deve funcionar com qualquer versão do diff) e colorir a saída sem alterar o formato da saída. 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 no diretório ~ / bin ou em qualquer outro lugar do seu caminho (sugiro chamá-lo de "cdiff").
fonte
Se você tiver o vim instalado, poderá fazer
diff file1 file2 | vim -
O Vim reconhecerá o formato diff e fornecerá uma coloração adequada. O traço no final é permitir que o vim aceite a entrada do comando diff.
fonte
Diferença de cor no nível do caractere: Instale o ccdiff
fonte