Para captar o que entendo dos comentários do Q, responderei que "não, não é possível fazer o que você quer com diff
e patch
", pois eles devem incluir o contexto, que inclui conteúdo que você não pode distribuir.
Dado que você não pode confiar em ed
para estar presente, se você pode confiar em sed
para estar lá, então você poderia percorrer seus arquivos alterados e atualizar cada um com uma expressão sed
:
$ cp input tempfile && \
$ sed \
-e '2s/.*/It is kinda awesome./' \
-e '4s/.*/No really, this is line 4/' \
tempfile > input && \
$ rm tempfile
Eu quebrei os comandos para sugerir a possibilidade de um script de escrita de script que gere os comandos acima, substituindo "input" pelo nome do arquivo que precisa ser alterado e as linhas "-e ..." com o nome conteúdo que precisa mudar. Aqui estou mudando o que está na linha 2 e na linha 4 com o texto correspondente.
Se você está preocupado com "tempfile" colidindo com um nome existente, veja se este sistema spartan tem mktemp
. Você pode salvar alguns ciclos mktemp criando um arquivo temporário para (re) usar para cada arquivo de entrada.
Se este sistema sem edição tiver um sed que suporte o sinalizador -i
, você poderá simplificar esse lote para:
$ sed -i.orig \
-e '2s/.*/It is kinda awesome./' \
-e '4s/.*/No really, this is line 4/' \
input
mikeserv traz um bom ponto com o comando 'c' do sed; O GNU sed parece aceitar o texto de substituição na mesma linha que o comando 'c', mas caso não o seu, aqui está uma opção:
$ cat > patch.sed
2c\
this is the new line two
4c\
this is an awesomer line four
^D
$ sed -f patch.sed input > output ## or sed -i.orig -f patch.sed input