如何使用PowerShell修剪SVN日志输出中的文件修改值

时间:2012-10-19 15:09:29

标签: regex svn powershell string-matching

我在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文件指示符有什么特别之处,还是正则表达式以某种方式关闭?

2 个答案:

答案 0 :(得分:2)

给出你的示例字符串:

$entry = 'M /trunk/project/application/myFile.cs'
$fileURL = ($entry -split ' /')[1]

答案 1 :(得分:1)

你的正则表达式不起作用,因为string.Replace只是替换文字字符串而不知道正则表达式。您可能需要[Regex]::Replace或仅-replace运算符。

但是当在PowerShell中使用SVN时,我总是采用XML格式。 SVN允许所有命令使用--xml选项,然后输出XML(如果它在两者之间死亡,则为无效)。

E.g:

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

将为您提供所有途径。

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

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

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