diffplus: zie snel verschillen tussen tekstversies
Doelgroep: *nix gebruikers, liefhebbers van de command line, informatici en andere technisch georiΓ«nteerde computergebruikers.

Soms wil je snel even de verschillen zien tussen twee tekstbestanden. Mogelijk heb je een configuratiebestand aangepast, en wil je de verschillen met een oude versie uit de backup bekijken. Of misschien werk je aan een paper en wil je jouw docent inzichtelijk maken welke veranderingen je hebt aangebracht. Er bestaan heel wat βdifferenceβ tools, waaronder voor de GUI vriendelijke programmaβs zoals WinMerge (opvolger van WinDiff) en Kompare. Voor de opdrachtregel of CLI omgeving (command line interface) zijn er diff, wdiff, colordiff, enzovoorts. Hoe je die slim kunt gebruiken staat op WebWereld.
Ik heb een eigen script diffplus.sh geschreven om gemakkelijker gebruik te kunnen maken van de goede CLI tools. Daarbij gebruik ik ook aha om ANSI kleurcodes naar HTML CSS om te kunnen zetten. Met mijn script kun je kiezen of je de uitvoer in less wilt zien, of in de text-based browser elinks, of dat je het wilt exporteren naar een HTML bestand. Het script kun je downloaden (diffplus.zip) of hieronder bekijken.
Hieronder een voorbeeld van diffplus.sh 1.txt 2.txt met de HTML uitvoer optie.
+ββββββββββββββββββββββββ+ | 1.txt | +ββββββββββββββββββββββββ+ | Dit is tekst nummer een. | | De eerste regel zegt niet veel. | | De tweede ook niet. |
+ββββββββββββββββββββββββ+ | 2.txt | +ββββββββββββββββββββββββ+ | Dit is tekst nummer twee. | | De eerste regel zegt niet zo heel veel. | | De tweede ook niet. | | De derde is scheepsrecht. |
+ββββββββββββββββββββββββ+ | HTML uitvoer | +ββββββββββββββββββββββββ+
Dit is tekst nummer [-een.-] {+twee.+}
De eerste
regel zegt niet {+zo
heel+} veel.
De tweede ook niet.
{+De derde is
scheepsrecht.+}
De uitvoer lijkt me duidelijk genoeg. Hopelijk heb je er iets aan. Hieronder de broncode van het script.
#!/bin/sh
#
# Shows nice diff output, colorized.
# Evert Mouw , 2011-09-[20,23]
#
# inspiration (Dutch):
# http://webwereld.nl/tips-en-tools/107978/diff-voor-gevorderden.html
#
# aha converts ansi color codes to html [http://ziz.delphigl.com/tool_aha.php]
# an alternative could be: ansi2html.sh [http://www.pixelbeat.org/docs/terminal_colours/]
#
# execute a variable as a command can be done with $cmd,
# but sometimes you need eval: http://fvue.nl/wiki/Bash:_Why_use_eval_with_variable_expansion%3F
#
# testing for available commands with hash:
# http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script
if [ -z $1 ]; then
echo $(basename $0) helps with selecting diff utilities to see differences between text files.
echo Usage: $(basename $0) file1 file2 \[menu_selection\]
echo The script is intended for interactive use, echo but you can give the menu
echo selection number as a third argument.
exit 0
fi
if [ ! -f "$1" ]; then echo "I need two files to compare."; exit 1; fi
if [ ! -f "$2" ]; then echo "I need a second file to compare with."; exit 1; fi
for util in vimdiff wdiff colordiff aha less elinks; do
hash $util 2>&- || { echo >&2 "I require $util but it's not installed."; abort="1"; }
done
if [ $abort ]; then exit 1; fi
S1="wdiff -n \"$1\" \"$2\" | colordiff"
if [ -z $3 ]; then
echo "How do you want the diff?"
echo " 0. cancel / exit"
echo " 1. piped to less -R"
echo " 2. piped to elinks"
echo " 3. exported to \"$1_diff.html\""
echo " 4. view or edit with vimdiff"
read choice
else
choice=$3
fi
case "$choice" in
0) exit 0;;
1) S2="| less -R";;
2) S2="| aha | elinks -eval 'set mime.default_type = \"text/html\"'";;
3) S2="| aha > $0_output.html";;
4) S1="vimdiff \"$1\" \"$2\""; S2="";;
*) echo "Invalid input, exiting."; exit 1;;
esac
cmd="$S1 $S2"
echo Executing: $cmd
eval $cmd
exit 0
Deze blogpost werd in december 2022 overgezet van WordPress naar een methode gebaseerd op Markdown; het is mogelijk dat hierbij fouten of wijzigingen zijn ontstaan t.o.v. de originele blogpost.