Sed(存在于 *nix,移植到 Win,对 OSX 一无所知)

Sed(存在于 *nix,移植到 Win,对 OSX 一无所知)

我尝试使用常规 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

差异(见上文)

准备两个中间编辑版本的1.txt

1a 将是

  Hi, my name is Joe.
  1
  2
  3
  4

1b 将是

  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

未测试来自 head 的命令结果

awk 脚本(见上文)

韓軟體(仅限 Windows)

编写搜索替换模式(支持正则表达式),测试,存储在预设中

相关内容