Quero comparar linhas em dois arquivos, mas para minimizar o ruído na saída, quero que apenas as diferenças reais nas linhas sejam impressas.
Por exemplo, dados os dois arquivos abaixo:
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
(a diferença entre eles é o caso da letra b
)
Eu quero que a saída seja algo como:
[-b-]{+B+}
Atualmente, a melhor abordagem que encontrei foi usar git diff --word-diff
, mas gera toda a linha:
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
Existe uma maneira mais direta de fazer isso, além de analisar manualmente a saída? Além disso, idealmente, eu preferiria usar algo mais comumente disponível do que git diff
, por exemplo, uma ferramenta shell POSIX que não exigiria que o usuário instalasse pacotes extras.
shell-script
diff
anol
fonte
fonte
b
e,B
portanto, é óbvio? Entendo que essa era provavelmente a diferença real, mas, para fins da pergunta, você pode facilitar.Respostas:
Usando wdiff :
A opção
-3
ou---no-common
remove as palavras comuns entre os dois arquivos e mostra apenas as diferenças.O
===...
banner (e linhas vazias) pode ser removido comgrep
:wdiff
também pode lerdiff
dados unificados se você der a opção-d
ou--diff-input
, por exemplo, degit
:Embora
wdiff
não seja uma ferramenta POSIX, ela geralmente está disponível.fonte
alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"
(extraído daqui ).