Quería formatear los archivos de Unix condicionalmente, actualmente estoy trabajando en el diffcomando y quería saber si es posible formatear el texto de la diffsalida del comando.
Ejemplo:
Los valores coincidentes deben mostrarse en verde.
Los valores no coincidentes deben mostrarse en rojo.
Supongamos que tengo dos archivos file1y file2e es mi mandamiento diff file1 file2.
Ahora quería que la salida contenga 5 desajustes, entonces esos desajustes deberían mostrarse en color rojo. ¿Cómo lograr esto usando Unix?
En resumen "Cambie el color a rojo para la salida del comando diff para valores que no coinciden"

Respuestas:
diff --colorSe agregó la opción GNU diffutils 3.4 (2016-08-08)Este es el valor predeterminado
diffimplementación en la mayoría de las distribuciones, que pronto la obtendrá.En 3.5 se ve así:
con:
También he solicitado el nivel de palabra diff a partir de
diff-highlighten: [Diffutils-devel] Agregue una bandera para producir resultados en color como git's diff-h | lists.gnu.orgAparentemente agregado en commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (Mar 2015).
fuente
alias diff='diff --color=auto'Si tiene acceso a GNU
diff, puede usar sus--X-group-formatopciones para obtener ese efecto sin ninguna herramienta adicional:Eso usa códigos de escape de color ANSI para obtener rojo y verde, con citas ANSI-C en el shell para acceder a los
\eescapes.--old-group-formate--new-group-formatidentifique líneas que no coincidan e insértelas entre los códigos de reinicio rojo y de color usando%<y%>, mientras--unchanged-group-formatinserta líneas coincidentes entre los códigos verde y de reinicio.También puede utilizar
--old-line-format(etc), a expensas de los escapes de color redundantes en cada línea:--old-line-format=$'\e[0;31m%L\e[0m'.fuente
diff.Tratar
colordiff file1 file2(Cita de http://www.colordiff.org/ )
fuente
diff --color=autosolo se coloreaban los marcadores de línea y la primera línea de cada+/-sección. Tuberíaless -SRpara facilitar la navegación.Color, salida de nivel de palabra
diffEsto es lo que puede hacer con el siguiente script y diff-resaltar :
(Crédito a la respuesta de @ retracile para el
sedresaltado)fuente
Debe echar un vistazo al
hlcomando disponible en github:git clone http://github.com/mbornet-hl/hly en: http://www.flashnux.com/notes/page_000022_US.htmlhles un comando de Linux escrito en C, especialmente diseñado para colorear un archivo de texto o la salida de un comando. Puede usar hasta 42 colores simultáneamente y usar un archivo de configuración para simplificar las líneas de comando. Puede colorear la salida de cada comando que se puede canalizar a otro. Y si sabe qué son las expresiones regulares, será muy fácil de usar. Puede usar lamanpágina para comprender cómo usarla.hlEs muy fácil de usar y configurar. Incluso puede usar el script hl_generic para colorear la salida de los comandos sin modificar su sintaxis.Puede, por ejemplo, colorear el resultado del
diffcomando simplemente escribiendo su comando habitual:Si necesita ayuda, solo envíeme un correo electrónico.
Saludos.
fuente
Hay una herramienta realmente ordenada construida con python en Github en este momento llamada
icdiff. Produce salidas de colores agradables que también son conscientes de la "gravedad". Lo uso todo el tiempo, vale la pena echarle un vistazo.fuente
si tienes vim instalado, puedes hacer
diff file1 file2 | vim -Vim reconocerá el formato diff y le dará el color adecuado. El guión al final es dejar que vim acepte la entrada del comando diff.
fuente
Instale Colouriser genérico ( grc ) y:
Disponible en Linux y MacOS.
fuente
O puedes usar
1)
diff --color=auto file1 file22)
colordiff file1 file23.Mi favorito:
git diff file1 file2implementado de la siguiente manera:Actualmente uso y recomiendo es , ya sea usando
git diffo canalizando su salidacolordiffusando:diff() { git diff --no-index "$1" "$2" | colordiff; }fuente
git diff --no-indexpero creo que los archivos deben ser buscables. (Al menos, no funciona con la sustitución del proceso bash para mí)git diffdesde hace mucho tiempo y el archivo es buscable para mí, de lo contrario no tendría sentido que lo hiciera bien.diff --color <(ls | head -n+3) <(ls | tail -n +5)pero no congit diff. Es cierto que no es un caso común o es demasiado difícil de solucionar.Solo una nota: para obtener el resultado "en paralelo" necesita "--color = always". También puede paginarlo con menos y conservar la salida de color:
Y otra pista más: intente mantener el interruptor "--color = always" al final. ¿Razón? Con dmesg de util-linux 2.27.1:
fuente
Este script usa la versión previa estándar 3.4 diff (debería funcionar con cualquier versión de diff) y colorea la salida sin cambiar el formato de salida de ninguna manera. Funciona con la última versión de RHEL (versión 7.5) que tiene GNU diff versión 3.3. Simplemente colóquelo en su directorio ~ / bin o en cualquier otro lugar de su ruta (sugiero llamarlo "cdiff").
fuente
Diferencia de color a nivel de caracteres: instalar ccdiff
fuente