Como obter a diferença de nível de caractere usando o comando “diff” no Linux usando o shell script?

2

Eu tenho dois arquivos SQL, um é old.sql e o outro é new.sql .

Suponha que old.sql contenha uma tabela com três campos, Emp_Id, Name e Address e dados armazenados em old.sql da seguinte forma:

Insert into table1 values (101 ,"a", "xyz");
Insert into table1 values (102 ,"b", "pqr");

Em seguida, alterei "a" o endereço "xyz" para "xyz123" e salvei esses dados no arquivo new.sql . Agora, o arquivo new.sql contém dados da seguinte forma:

Insert into table1 values (101 ,"a", "xyz123");
Insert into table1 values (102 ,"b", "pqr");

Quando eu uso o comando diff da seguinte forma:

diff old.sql new.sql

dá diferenças de linha, mas eu quero apenas dados atualizados, como xyz123.

    
por user168519 31.05.2016 / 09:28

3 respostas

4

Você pode encontrar wdiff útil para esse tipo de comparação; é um front-end para diff , que produz comparações palavra por palavra. Com o seu exemplo, produz por padrão

Insert into table1 values (101 ,"a", [-"xyz");-] {+"xyz123");+}
Insert into table1 values (102 ,"b", "pqr");

Ele pode usar os recursos do terminal para tornar a saída mais legível em um terminal ( wdiff -t ). Ele também tem uma opção -3 que limita a saída apenas a palavras alteradas:

======================================================================
 [-"xyz");-] {+"xyz123");+}
======================================================================

Se você não tiver o wdiff instalado, será necessário instalá-lo. Execute sudo apt-get install wdiff ou sudo dnf install wdiff ou sudo yum install wdiff ou o comando apropriado para o seu sistema operacional.

    
por 31.05.2016 / 11:01
1

Por definição, diff está mostrando diferenças linhas por linha (veja a página de manual do diff), portanto, não mostrará apenas os caracteres diferentes. Você pode reduzir a quantidade de diferença pré-processando os arquivos, por exemplo, inserindo um caractere de fim de linha após cada semi-coluna:

sed -e 's/;/;\'$'\n/g' old.sql > old.patched

Em seguida, use diff nos dois arquivos resultantes.

    
por 31.05.2016 / 10:03
1

Você pode usar:

diff -u old.sql new.sql |colordiff |diff-highlight

OcolordifféumpacotedoUbuntu.Vocêpodeinstalá-lousandosudoapt-getinstallcolordiff.

diff-hightédogit(desdeaversão2.9).Estálocalizadoem/usr/share/doc/git/contrib/diff-highlight/diff-highlight.Vocêpodecolocá-loemalgumlugarnoseu$PATH.Ouobtê-lode projeto diff-so-fancy .

    
por 05.10.2016 / 17:51