Bash 是否可以忽略修补程序的顺序?

Bash 是否可以忽略修补程序的顺序?,bash,patch,Bash,Patch,我想知道是否有可能应用一个补丁文件,其中线的顺序可能会有所不同。例如: file.txt: PARAM5 PARAM4 PARAM3 PARAM2 PARAM1 file.patch: --- f1.txt 2014-03-31 11:15:38.543560653 -0400 +++ f2.txt 2014-03-31 11:25:11.029173000 -0400 @@ -2 +1,0 @@ -PARAM2 @@ -4 +2,0 @@ -PARAM4 在这里,我想从

我想知道是否有可能应用一个补丁文件,其中线的顺序可能会有所不同。例如:

file.txt:

PARAM5
PARAM4
PARAM3
PARAM2
PARAM1
file.patch:

--- f1.txt      2014-03-31 11:15:38.543560653 -0400
+++ f2.txt      2014-03-31 11:25:11.029173000 -0400
@@ -2 +1,0 @@
-PARAM2
@@ -4 +2,0 @@
-PARAM4

在这里,我想从file.txt中删除PARAM2、PARAM4,但在我要从中删除它们的文件中,它们的顺序可能不是这样。注意:我可以写一个脚本来做这件事,但在我继续之前,我想知道是否有更优雅的方式来做这件事。

不,没有优雅的方式。补丁没有提供任何现成的东西。我认为你找不到任何可以做到这一点的东西。毕竟,如果多次遇到PARAM2,正确的行为是什么;它对已知的文件状态应用了固定的更改,因此隐式地假定不仅PARAM2和PARAM4的相对顺序已知,而且它们在目标文件中的确切位置也已知。好的,谢谢。我只是检查一下,你试过用sed吗?在您的示例文件中,sed-i'/^PARAM[24]$/d'file.txt将执行您想要的操作。