remendando arquivos ligeiramente diferentes em coisas comuns

1

Eu tentei usar diff e patch regulares para fazer o que segue, mas não parece funcionar ou não estou usando certo. Eu estou querendo saber se há é uma ferramenta para corrigir alterações em um arquivo com base no conteúdo real da linha.
Por exemplo, eu tenho os seguintes arquivos semelhantes com linhas comuns, mas diferentes ordens de linha:

  File 1.txt
  Hi, my name is Ted.
  1
  2
  3
  4

  File 2.txt
  1
  2
  3
  4
  Hi, my name is Ted


  File 3.txt
  1
  2
  Hi, my name is Ted
  3
  4


  I change File 1.txt to:
  Hi, my name is Joe.
  1
  2
  3
  40

e agora eu quero criar algum tipo de patch ou distribuir essa alteração para os outros arquivos, mas não copiando todo o conteúdo do arquivo 1.txt para os outros arquivos, mas apenas marcando as linhas comuns:

  4 

para

  40

e

  Hi, my name is Ted. 

para

  Hi, my name is Joe.

Qualquer ajuda apreciada,

Ted

    
por Flethuseo 07.10.2011 / 18:08

1 resposta

1

Diferentes sistemas operacionais podem ter ferramentas totalmente diferentes

Sed (existe no * nix, portado para o Win, não sabe nada sobre o OSX)

Do exemplo

 # substitute (find and replace) "foo" with "bar" on each line

 sed 's/foo/bar/'             # replaces only 1st instance in a line

i.e. smth. como

sed 's/4/40/' 2.txt > 2e.txt
...
sed 's/4/40/' 4.txt > 4e.txt

ou

sed 's/4/40/' 2.txt 3.txt 4.txt> common.txt

e dividir o common.txt mesclado após

diff (veja acima)

Prepare duas versões intermediárias do 1.txt

1a será

  Hi, my name is Joe.
  1
  2
  3
  4

1b será

  Hi, my name is Ted.
  1
  2
  3
  40

Prepare patches

diff -U 0 1.txt 1a.txt > fix1.patch

diff -U 0 1.txt 1b.txt > fix2.patch

Aplicar patches

patch -u -b 2.txt fix1.patch
...
patch -u -b 3.txt fix2.patch

Os resultados dos comandos da cabeça não foram testados

script awk (veja acima)

GrepWin (somente Windows)

Escreva o padrão de substituição de pesquisa (regexps suportado), teste, armazene em predefinições

    
por 08.10.2011 / 03:28