Я знаю, что diff -e может выводить скрипт ed . И я понимаю, что ed и sed разделяют свой подход, но ed интерактивен, а sed предназначен для потоков.

То, что я хотел бы сделать, это взять вывод diff -e (или некоторый другой вызов diff) и преобразовать его в вызов sed , чтобы при вызове этой команды с исходным файлом "before" в качестве ввода выводился эквивалент «» после "файла от вызова diff . Я хотел бы отформатировать команду как набор параметров -e <BLERG> , переданных в sed чтобы избежать необходимости записи сценария ed/sed в другой файл.

Я пробовал кучу очевидных вещей, но я не получаю желаемого (или даже разумно выглядящего) результата, и я думаю, что мне не хватает какой-то всеобъемлющей вещи. Это возможно?

2 ответа2

4

Вы можете придерживаться ed: при условии, что вы хотите различать file1 и file2, а затем применить изменения к file1 и записать в файл с именем file1.b:

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

Теперь не должно быть никакой разницы между file2 и file1.b:

$ diff file2 file1.b && echo "no diff"
no diff
1

diff и последующее применение diff различий в разное время. Предполагая, что у вас есть выходные данные из вашего diff , я бы использовал patch:

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

Затем на приемном конце:

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

Это означает, что ваши имена файлов должны быть одинаковыми, так как они содержатся в файле исправления.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .