Je voulais formater les fichiers Unix de manière conditionnelle, je travaille actuellement sur la diff
commande et je voulais savoir s'il était possible de formater le texte de la diff
sortie de la commande.
Exemple:
Les valeurs correspondantes doivent être affichées en vert.
Les valeurs inégalées doivent être affichées en rouge.
Supposons que j'ai deux fichiers file1
et file2
que ma commande soit diff file1 file2
.
Maintenant, je voulais que supposer que la sortie contienne 5 non-concordance, alors cette discordance devrait être affichée en couleur rouge. Comment y parvenir avec unix?
En bref "Changer la couleur en rouge pour la sortie de la commande diff pour les valeurs qui ne correspondent pas"
Réponses:
diff --color
option a été ajoutée GNU diffutils 3.4 (2016-08-08)Il s'agit de l'
diff
implémentation par défaut de la plupart des distributions, qui sera bientôt disponible.Sur 3.5, cela ressemble à ceci:
avec:
J'ai également demandé la différence de niveau de mot à partir
diff-highlight
de: [Diffutils-devel] Ajoutez un drapeau pour produire une sortie colorée comme diff-h de git | lists.gnu.orgApparemment ajouté dans la validation c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (mars 2015).
la source
alias diff='diff --color=auto'
Si vous avez accès à GNU,
diff
vous pouvez utiliser ses--X-group-format
options pour obtenir cet effet sans aucun outil supplémentaire:Cela utilise des codes d'échappement de couleur ANSI pour obtenir le rouge et le vert, avec ANSI-C entre guillemets pour accéder aux
\e
échappements.--old-group-format
et--new-group-format
identifier les lignes qui ne correspondent pas et les insérer entre les codes de réinitialisation rouge et couleur à l'aide de%<
et%>
, tout en--unchanged-group-format
insérant des lignes correspondantes entre les codes vert et de réinitialisation.Vous pouvez également utiliser
--old-line-format
(etc.), au détriment des évasions de couleur redondantes sur chaque ligne:--old-line-format=$'\e[0;31m%L\e[0m'
.la source
diff
.Essayer
colordiff file1 file2
(Citation de http://www.colordiff.org/ )
la source
diff --color=auto
n'a été que des marqueurs de ligne colourising et la première ligne de chaque+
/-
section. La tuyauterieless -SR
facilite la navigation.Couleur, mot-niveau
diff
ouputVoici ce que vous pouvez faire avec le script ci-dessous et diff-highlight :
(Crédit à la réponse de @ retracile pour la
sed
mise en évidence)la source
Vous devriez jeter un œil à la
hl
commande disponible sur github:git clone http://github.com/mbornet-hl/hl
et sur: http://www.flashnux.com/notes/page_000022_US.htmlhl
est une commande Linux écrite en C, spécialement conçue pour colorer un fichier texte ou la sortie d'une commande. Vous pouvez utiliser jusqu'à 42 couleurs simultanément et utiliser un fichier de configuration pour simplifier les lignes de commande. Vous pouvez coloriser la sortie de chaque commande pouvant être redirigée vers une autre. Et si vous savez ce que sont les expressions régulières, il vous sera très facile de les utiliser. Vous pouvez utiliser laman
page pour comprendre comment l'utiliser.hl
est très facile à utiliser et à configurer. Vous pouvez même utiliser le script hl_generic pour coloriser la sortie des commandes sans modifier leur syntaxe.Vous pouvez, par exemple, coloriser la sortie de la
diff
commande simplement en tapant votre commande habituelle:Si vous avez besoin d'aide, envoyez-moi simplement un e-mail.
Cordialement.
la source
Il existe un outil vraiment soigné construit avec python sur Github au moment appelé
icdiff
. Produit de belles sorties colorées qui sont également sensibles à la «gravité». Je l'utilise tout le temps, ça vaut le coup.la source
si vous avez installé vim, vous pouvez le faire
diff file1 file2 | vim -
Vim reconnaîtra le format diff et lui donnera une coloration appropriée. Le tiret à la fin est de laisser vim accepter l'entrée de la commande diff.
la source
Installez Generic Colouriser ( grc ) et:
Disponible sur Linux et MacOS.
la source
Soit vous pouvez utiliser
1.
diff --color=auto file1 file2
2.
colordiff file1 file2
3.Mon favori:
git diff file1 file2
mis en œuvre comme ci-dessous:J'utilise actuellement et recommande d' utiliser,
git diff
ou de canaliser sa sortiecolordiff
en utilisant:diff() { git diff --no-index "$1" "$2" | colordiff; }
la source
git diff --no-index
aussi, mais je pense que les fichiers doivent être recherchés. (Au moins, ne fonctionne pas avec la substitution de processus bash pour moi)git diff
depuis longtemps et le fichier est recherché pour moi, sinon il ne serait pas utile que je le fasse correctement.diff --color <(ls | head -n+3) <(ls | tail -n +5)
mais pas avecgit diff
. Certes, ce n'est pas un cas courant ou trop difficile à contourner.Juste une note: pour obtenir la sortie "côte à côte", vous avez besoin de "--color = always". Vous pouvez également le paginer avec moins et conserver la sortie colorée:
Et encore une autre astuce: essayez de garder le commutateur "--color = always" à la fin. Raison? Avec dmesg d'util-linux 2.27.1:
la source
Ce script utilise le diff standard de pré-version 3.4 (il devrait fonctionner avec n'importe quelle version de diff) et colorise la sortie sans changer le format de sortie de quelque façon que ce soit. Il fonctionne avec la dernière version de RHEL (version 7.5) qui a GNU diff version 3.3. Il suffit de le mettre dans votre répertoire ~ / bin ou n'importe où ailleurs dans votre chemin (je suggère de l'appeler "cdiff").
la source
Différence de couleur au niveau des caractères: installez ccdiff
la source