我尝试使用常规 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)
编写搜索替换模式(支持正则表达式),测试,存储在预设中