我需要在对 pom.xml 进行更改的 subversion 转储中找到所有修订。
我正在使用svndumptool成功打印修订,然后 sed 过滤这些发现。
我可以将修订号作为开始进行匹配,但是如果在找到停止之前找到第二个匹配的开始,我需要能够将其丢弃。
这是我正在使用的命令:
svnDumpTool=~/path/to/svndumptool.py
target=specificSvn.dump
# use svndumptool to read the svnlog from target to stdin |
# sed then matches start -r[0-9], such as -r103, ends on pom.xml
# then redirects stdout > to a log file for this target
$svnDumpTool log $target -v | sed -n '/r[0-9]/,/pom.xml/p' > $target.log
考虑这样的日志:
-r0 | ... | ...
Changed paths:
none; initialization of the repo; not my match
-r1 | ... | ...
Changed paths:
... not my matches here
--------
-r2 | ... | ...
Changed paths:
... nor here
--------
-r3 | ... | ...
Changed paths:
pom.xml
--------
-r4 | ... | ...
Changed paths:
pom.xml
--------
-r5 | ... | ...
Changed paths:
... changes may or may not be here
--------
这是结果。
在第一次通过时,我得到的比我想要的要多:
- 我会在 -r0 开始时得到一场比赛,
- 来自 -r3 的 pom.xml 末尾的匹配,
从头到尾打印所有内容,包括 -r0、-r1 和 -r2:
-r0 | ... | ... Changed paths: none; initialization of the repo; not my match -r1 | ... | ... Changed paths: ... not my matches here -------- -r2 | ... | ... Changed paths: ... nor here -------- -r3 | ... | ... Changed paths: pom.xml
在第二遍时,我得到了我想要的:
- 我会在 -r4 开始时得到一场比赛,
来自 -r4 的 pom.xml 末尾的匹配:
-r4 | ... | ... Changed paths: pom.xml
所以,我认为我需要做的是:
- 如果我找到一个开始,
- 我在找到匹配结束的表达式之前找到另一个表达式匹配开始,
- 然后扔掉第一个开始;否则打印。
我认为这篇文章可能有我的答案,但我尝试过的任何尝试都失败了。
编辑:自动更正让我明白了,当它应该是“pom.xml”时,我错误地将输出列为“Pom.xml”。