Chcę porównać linie w dwóch plikach, ale aby zminimalizować szum na wyjściu, chcę, aby drukowane były tylko rzeczywiste różnice w liniach.
Na przykład, biorąc pod uwagę dwa poniższe pliki:
a.txt
a b c d e f g h i j k l m n o p q r s t u v w x y z
b.txt
a B c d e f g h i j k l m n o p q r s t u v w x y z
(różnica między nimi jest w przypadku listu b
)
Chcę, aby wynik był jak:
[-b-]{+B+}
Obecnie najlepszym podejściem, jakie znalazłem, było zastosowanie git diff --word-diff
, ale generuje całą linię:
a [-b-]{+B+} c d e f g h i j k l m n o p q r s t u v w x y z
Czy istnieje bardziej bezpośredni sposób na to, niż ręczne analizowanie danych wyjściowych? Idealnie wolałbym również użyć czegoś bardziej powszechnie dostępnego niż git diff
np. Narzędzie powłoki POSIX, które nie wymagałoby od użytkownika instalowania dodatkowych pakietów.
shell-script
diff
anol
źródło
źródło
b
aB
więc to oczywiste? Rozumiem, że była to prawdopodobnie faktyczna różnica, ale dla celów pytania możesz to ułatwić.Odpowiedzi:
Za pomocą wdiff :
Opcja
-3
lub---no-common
usunie słowa wspólne dla obu plików i pokaże tylko różnice.===...
Transparent (i pustych linii) może być usunięty zgrep
:wdiff
może również czytać zunifikowanediff
dane, jeśli dasz mu opcję-d
lub--diff-input
, na przykład zgit
:Chociaż
wdiff
nie jest to narzędzie POSIX, jest ono powszechnie dostępne.źródło
alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"
(pobranym stąd ).