Como posso criar uma linha de comando sed a partir do diff?

0

Estou ciente de que diff -e pode gerar um script ed . E meu entendimento é que ed e sed compartilham sua abordagem, mas que ed é interativo e sed é para fluxos.

O que eu gostaria de fazer é pegar a saída de diff -e (ou alguma outra invocação de diff ) e colocá-la em uma invocação de sed , de modo que invocar esse comando com o arquivo "antes" original como input produz saída equivalente ao arquivo "after" da invocação diff . Eu gostaria de formatar o comando como uma coleção de -e <BLERG> opções passadas para sed para evitar ter que escrever o script ed / sed em outro arquivo.

Eu tentei vários mungings óbvios, mas não estou obtendo a saída desejada (ou mesmo razoável), e acho que estou perdendo alguma coisa abrangente. Isso é possível?

    
por ipmcc 29.03.2014 / 13:08

2 respostas

4

Você poderia ficar com o ed: assumindo que você queria diff file1 e file2, e então aplicar as alterações no file1 e gravar em um arquivo chamado file1.b:

{ diff -e file1 file2; echo "w file1.b"; echo q; } | ed file1

Agora, não deve haver diferença entre o arquivo2 e o arquivo1.b:

$ diff file2 file1.b && echo "no diff"
no diff
    
por 29.03.2014 / 14:18
1

O diff e a aplicação subsequente das diferenças diff estão em momentos diferentes. Então, supondo que você tenha a saída do seu diff , eu usaria patch :

diff -u original.html new.html > original.patch

Em seguida, no final do recebimento:

curl -s http://someurl.com > original.html; patch < original.patch

Isso significa que os nomes dos seus arquivos serão os mesmos, pois estão contidos no arquivo de patch.

    
por 29.03.2014 / 22:19