【问题标题】:Native PowerShell equivalent of UNIX diff and patch本机 PowerShell 等效于 UNIX 差异和补丁
【发布时间】:2015-06-17 19:57:09
【问题描述】:

我需要在脚本中即时修补文件。

为了使脚本的内容更具可读性,我想以类似于 UNIX“差异”和“补丁”方法的方式实现它。在标准 UNIX 系统上,diff 可以生成一个特殊格式的文本文件,代表两个文件之间的差异。这可能会被“补丁”与要修改的文件一起使用,以便以干净直接的方式生成更改后的文件。

在 PowerShell 中似乎没有直接的方法可以做到这一点。我见过的选项是使用多行正则表达式 - 这很难构建和解释,使用整个文件并逐行处理它或将我希望在脚本中拥有的新文件编码为 Base64 字符串和只需将其解码为目标文件。

虽然 Compare-Object 看起来可以做一些事情来生成适当的 diff 对象,但似乎没有简单的方法可以使用 Compare-Object 的输出将更改应用于字符串数组。

【问题讨论】:

  • 一个差异实用程序被称为fc,也许你可以使用那个。这也有助于您的差异是二进制的,这样您就可以调用fc /b 来比较有问题的文件。
  • Fc.exe 是一个有用的提示 - 但它不能解决将输出(补丁)应用到原始文件以创建新文件的关键问题。
  • Compare-Object 将是明显的开始。您可以做的最好的事情是显示一些示例数据文件(几行)以及生成的文件应该是什么样子。 Unix 不是我的强项,但我知道如果你展示一些示例我可以提供帮助。
  • 您可以使用fc.exe/n 开关,这样不同的输出可能足以从中构建补丁。使用/b 模式,您已经获得了可用于构建补丁的详细输出。但是确实没有直接的方法来制作补丁或拥有补丁命令。

标签: unix powershell


【解决方案1】:

Compare-Object 是最接近 diff 的东西,并且 PowerShell 中没有与 patch 等效的东西。如果您需要该功能,我建议使用diffpatch 的Windows 端口。

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多