2015-06-17 3 views
0

У меня есть требование потенциально исправлять файл «на лету» как часть скрипта.Native PowerShell эквивалент UNIX diff и patch

Чтобы сделать то, что сценарий делает более читаемым, я хотел бы реализовать это способом, подобным подходу UNIX «diff» и «patch». В стандартных UNIX-системах diff может генерировать специально форматированный текстовый файл, который представляет различия между двумя файлами. Это может быть использовано «патчем» вместе с файлом для изменения, чтобы сгенерировать измененный файл чистым и простым способом.

Похоже, что в PowerShell нет простого способа сделать это. Параметры, которые я видел, - это использовать несколько регулярных выражений строк, которые трудно построить и интерпретировать, потребляя весь файл и обрабатывая его по строкам или кодируя новый файл, который я хочу иметь в скрипте как строку Base64, и просто декодировать его в целевой файл.

В то время как Compare-Object выглядит так, как будто он может что-то сделать для создания соответствующего объекта diff, кажется, нет простого способа использовать вывод Compare-Object для применения изменения к массиву строк.

+0

Утилита diff используется как 'fc', возможно, вы можете использовать ее. Это также помогает вашим различиям в бинарности, так что вы вызываете 'fc/b' для сравнения файлов, о которых идет речь. – Vesper

+0

Fc.exe - полезный совет - но он не решает ключевую проблему, а затем применяет выход (патч) к исходному файлу для создания нового файла. – user1383092

+0

Compare-Object будет очевидным началом для этого. Лучшее, что вы могли бы сделать, это показать некоторые примеры файлов данных (несколько строк) и то, как должен выглядеть результирующий файл. Unix - это не моя сильная сторона, но я знаю, что смогу помочь, если вы покажете несколько образцов. – Matt

ответ

1

Compare-Object - это самое близкое к diff, и нет никакого эквивалента patch, встроенного в PowerShell. Если вам нужна эта функциональность, я бы рекомендовал использовать порты Windows diff и patch.

Смежные вопросы