Dif não funciona como eu esperava

0

Eu tenho 2 arquivos, a.txt e b.txt e quero compará-los.

a.txt contém:

abc
jkl < jkl
mno > mno
pqr <> pqr

b.txt contém:

abc
jkl < jkl
mno > mno
pqr <> pqrs
stu

Estou usando este script:

$ diff a.txt b.txt | grep "> " | cut -c3- > c.txt

Que resulta em c.txt :

pqr <> pqr
pqr <> pqrs
stu

Por que pqr <> pqr está sendo incluído nos resultados? Como posso resolver isso?

    
por user3682941 28.05.2014 / 11:51

3 respostas

1

Como observou @StephaneChazelas, você se esqueceu de ancorar sua expressão regular, portanto, o "> " corresponderá ao > na linha pqr <> pqr que está apenas em a.txt .

Mas parece que você quer que um filtro mostre apenas as linhas novas ou alteradas em b.txt . Se você está usando o GNU diff, ele oferece algumas opções para você conseguir isso diretamente:

$ diff --old-line-format '' --unchanged-line-format '' --new-line-format '%L' a.txt b.txt 
pqr <> pqrs
stu

O --old-line-format '' remove todas as linhas que não estão em b.txt , o --unchanged-line-format '' remove todas as linhas comuns a ambos os arquivos e o --new-line-format '%L' mostra apenas o conteúdo da linha para todas as linhas novas ou alteradas em b.txt . O > inicial é suprimido.

    
por 28.05.2014 / 14:03
1

Como @StephaneChazelas afirmou nos comentários, isso parece não ter nada a ver com o SSH. Executando tudo localmente recebo os mesmos resultados que você, principalmente:

$ diff a.txt b.txt | grep "> " | cut -c3-
pqr <> pqr
pqr <> pqrs
stu

O comando diff está identificando linhas que são diferentes e a linha pqr <> pqrs é exclusiva entre os 2 arquivos. Você pode usar um diff lado a lado para ver quais linhas estão se alinhando se isso ajudar.

$ diff -y a.txt b.txt
abc                                                             abc
jkl < jkl                                                       jkl < jkl
mno > mno                                                       mno > mno
pqr <> pqr                                                    | pqr <> pqrs
                                                              > stu

As linhas que são semelhantes mas não idênticas estão marcadas com um | . Linhas que são únicas são marcadas com um > se apenas no arquivo # 2, ou um < se estiver presente apenas no arquivo # 1. Linhas idênticas não mostram nenhuma marcação desse tipo.

    
por 28.05.2014 / 13:48
0

Talvez você tenha espaços em branco extras.

tente

diff -w -B file1.txt file2.txt

-w Ignora todo o espaço em branco.

-B Ignora alterações cujas linhas estão todas em branco.

    
por 19.10.2016 / 08:36