Исправление немного разных файлов на общие вещи
Я попытался использовать обычные diff и patch, чтобы сделать то, что следует, но, похоже, это не работает, или я не правильно его использую. Мне интересно, есть ли инструмент для исправления изменений в файле на основе фактического содержимого строки.
Например, у меня есть следующие похожие файлы с общими строками, но с разным порядком строк:
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
и теперь я хочу создать какой-то патч или распространить это изменение на другие файлы, но не копируя все содержимое файла 1.txt в другие файлы, а изменяя только общие строки:
4
в
40
а также
Hi, my name is Ted.
в
Hi, my name is Joe.
Любая помощь приветствуется,
Тед
1 ответ
У разных ОС могут быть совершенно разные инструменты
Sed (существует в *nix, портирован на Win, ничего не знает об OSX)
Из примера
# substitute (find and replace) "foo" with "bar" on each line
sed 's/foo/bar/' # replaces only 1st instance in a line
что-л. лайк
sed 's/4/40/' 2.txt > 2e.txt
...
sed 's/4/40/' 4.txt > 4e.txt
или же
sed 's/4/40/' 2.txt 3.txt 4.txt> common.txt
и разделить объединены common.txt после
diff (см. выше)
Подготовьте две промежуточные версии 1.txt
1а будет
Hi, my name is Joe.
1
2
3
4
1б будет
Hi, my name is Ted.
1
2
3
40
Подготовить патчи
diff -U 0 1.txt 1a.txt > fix1.patch
diff -U 0 1.txt 1b.txt > fix2.patch
Применить патчи
patch -u -b 2.txt fix1.patch
...
patch -u -b 3.txt fix2.patch
Результаты команд из головы не тестировались
скрипт awk (см. выше)
GrepWin (только для Windows)
Написать шаблон поиска-замены (поддерживается регулярное выражение), проверить, сохранить в пресетах