【问题标题】:How to trim the file modification value from SVN log output with PowerShell如何使用 PowerShell 从 SVN 日志输出中修剪文件修改值
【发布时间】:2012-10-10 05:46:40
【问题描述】:

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

【问题讨论】:

    标签: regex svn powershell string-matching


    【解决方案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+'
    

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

    【讨论】:

    • 我这样做是为了其他目的,但这次我试图避免它,因为它后来无法满足我的需求。不过我可能会重新访问。
    • 好吧,在实际阅读问题后现在扩展答案;)
    【解决方案2】:

    给定您的示例字符串:

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

    【讨论】:

    • 我非常专注于尝试在正则表达式中完成这项工作,我完全忘记了拆分。在正则表达式中得到整个东西会很好,但生活有时会给你柠檬
    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多