1

我在 PowerShell 中捕获了一个 SVN 日志,然后我试图修改并删除除文件 URL 之外的所有内容。我遇到的问题是让正则表达式删除文件 URL 之前的所有内容。我的条目匹配为:

M /trunk/project/application/myFile.cs

开头有两个空格,最初我试图用正则表达式替换,但似乎不起作用,所以我使用修剪并最终得到:

M /trunk/project/application/myFile.cs

现在我想摆脱文件状态指示器,所以我有一个正则表达式,如:

$entry = $entry.Replace("^[ADMR]\s+","")

其中 $entry 是匹配的文件 URL,但这似乎没有做任何事情,即使删除插入符号以查找值和空间也没有做任何事情。我知道 $entry 是一个字符串,我最初认为 Replace 不起作用,因为 $entry 不是一个字符串,但是在脚本期间运行 Get-Member 表明我有一个字符串类型。svn 文件指示器有什么特别之处吗?或者正则表达式是否以某种方式关闭?

4

2 回答 2

2

给定您的示例字符串:

$entry = 'M /trunk/project/application/myFile.cs'
$fileURL = ($entry -split ' /')[1]
于 2012-10-19T15:18:38.283 回答
1

您的正则表达式不起作用,因为string.Replace只是进行文字字符串替换并且不了解正则表达式。您可能需要[Regex]::Replace或只是-replace操作员。

但是在将 SVN 与 PowerShell 一起使用时,我总是使用 XML 格式。SVN 允许--xml所有命令的选项,然后将输出 XML(尽管如果它在两者之间死亡则无效)。

例如:

$x = [xml](svn log -l 3 --verbose --xml)
$x.log.logentry|%{$_.paths}|%{$_.path}|%{$_.'#text'}

会给你所有的路径。

但是如果你需要一个正则表达式:

$entry -replace '^.*?\s+'

这将删除直到(包括)第一个空格序列的所有内容,这具有额外的好处,您不需要记住那里可能出现的字符。

于 2012-10-19T15:28:42.113 回答