1

Я попытался использовать обычные 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 ответ1

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)

Написать шаблон поиска-замены (поддерживается регулярное выражение), проверить, сохранить в пресетах

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