Comment utiliser awk
pour afficher uniquement les lignes +
et -
, en tenant compte de toute couleur ou de la mise en forme du texte git diff
:
Pas une seule des autres réponses ici (y compris mon autre réponse ) ne fera exactement ce que vous voulez à 100% correctement. Cette réponse, cependant, le sera. Voici un 1-liner que vous pouvez copier et coller dans votre terminal.Je viens de le faire en plusieurs lignes pour plus de lisibilité - vous pouvez le copier-coller de la même manière, donc je ferais aussi bien de le rendre lisible! Il repose sur le awk
langage de programmation:
git diff --color=always "$@" | awk '
# 1. Match and then skip "--- a/" and "+++ b/" lines
/^(\033\[(([0-9]{1,2};?){1,10})m)?(--- a\/|\+\+\+ b\/)/ {
next
}
# 2. Now print the remaining "+" and "-" lines ONLY! Note: doing step 1 above first was required or
# else those lines would have been matched by this matcher below too since they also begin with
# the "+" and "-" symbols.
/^(\033\[(([0-9]{1,2};?){1,10})m)?[-+]/ {
print $0
}
' | less -RFX
Voici ses caractéristiques. Toutes ces fonctionnalités, prises ensemble, résolvent les lacunes de toutes les autres réponses ici:
- Il gère la sortie couleur ET sans couleur. C'est ce que fait cette expression régulière:
^(\033\[(([0-9]{1,2};?){1,10})m)?
- Il gère TOUTES LES COULEURS et TOUTES LES OPTIONS DE FORMATAGE DE TEXTE, y compris le gras, l'italique, le barré, etc., que vous pouvez définir dans vos
git config
paramètres . C'est pourquoi le regex ci-dessus a;?
et{1,10}
: s'il détecte le début d'un code de formatage de couleur ou de texte, il correspondra à jusqu'à 10 séquences de ces codes ANSI combinés.
Il n'inclut PAS également les lignes commençant par @@
et le mot diff
, comme le fait la réponse acceptée . Si vous voulez ces lignes (qui, franchement, je pense qu'elles sont utiles :)), faites ceci à la place:
git diff --unified=0
ou
git diff -U0
Il affiche la sortie de la même manière exacte que le git diff
ferait: dans le less
pager avec sortie couleur optionnelle ( -R
), et seulement si le texte est> 1 page ( -F
), et tout en conservant la page de texte actuelle à l'écran lorsque vous q
uit ( -X
) .
Il a également l'avantage d'être puissant et facilement configurable car il utilise le langage de programmation awk.
Si vous souhaitez apprendre awk , voici quelques ressources:
gawk
(GNU awk
) manuel: https://www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
- Étude
git diffn
et commentaires y afférents : https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh
- Si vous voulez
git diffn
aussi, qui est git diff
avec les numéros de ligne, voir ici: Git diff avec les numéros de ligne (Git log avec les numéros de ligne)
- Quelques exemples de tests de syntaxe et de «bonjour le monde» awk: https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
En prime, j'ai également résumé ce qui précède pour être utilisé comme git diffc
, ce qui signifie "git diff pour afficher UNIQUEMENT les 'c'hanges". L'utilisation est identique à git diff
; utilisez simplement à la git diffc
place! Il prend en charge TOUTES les options. La couleur est activée par défaut. Pour le désactiver, utilisez simplement git diffc --no-color
ou git diffc --color=never
. Voir man git diff
pour plus de détails.
Depuis que je viens de terminer git diffn
(un outil à afficher git diff
avec des numéros de lignes) hier soir, l'écriture git diffc
était triviale. J'ai pensé que je ferais mieux de le faire maintenant pendant que les connaissances sont fraîches dans ma tête.
Installer git diffc
:
Suivez les instructions à la fin de cette réponse ici , sauf partout où vous voyez git-diffn
dans les instructions, utilisez git-diffc
plutôt. Cela inclut aussi dans la wget
commande. Le téléchargement et l'installation git diffc
sont faciles: il ne s'agit que de quelques commandes.