Quería formatear los archivos de Unix condicionalmente, actualmente estoy trabajando en el diff
comando y quería saber si es posible formatear el texto de la diff
salida del comando.
Ejemplo:
Los valores coincidentes deben mostrarse en verde.
Los valores no coincidentes deben mostrarse en rojo.
Supongamos que tengo dos archivos file1
y file2
e 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 --color
Se agregó la opción GNU diffutils 3.4 (2016-08-08)Este es el valor predeterminado
diff
implementació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-highlight
en: [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-format
opciones 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
\e
escapes.--old-group-format
e--new-group-format
identifique líneas que no coincidan e insértelas entre los códigos de reinicio rojo y de color usando%<
y%>
, mientras--unchanged-group-format
inserta 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=auto
solo se coloreaban los marcadores de línea y la primera línea de cada+
/-
sección. Tuberíaless -SR
para facilitar la navegación.Color, salida de nivel de palabra
diff
Esto es lo que puede hacer con el siguiente script y diff-resaltar :
(Crédito a la respuesta de @ retracile para el
sed
resaltado)fuente
Debe echar un vistazo al
hl
comando disponible en github:git clone http://github.com/mbornet-hl/hl
y en: http://www.flashnux.com/notes/page_000022_US.htmlhl
es 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 laman
página para comprender cómo usarla.hl
Es 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
diff
comando 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 file2
2)
colordiff file1 file2
3.Mi favorito:
git diff file1 file2
implementado de la siguiente manera:Actualmente uso y recomiendo es , ya sea usando
git diff
o canalizando su salidacolordiff
usando:diff() { git diff --no-index "$1" "$2" | colordiff; }
fuente
git diff --no-index
pero creo que los archivos deben ser buscables. (Al menos, no funciona con la sustitución del proceso bash para mí)git diff
desde 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