代码之家  ›  专栏  ›  技术社区  ›  Shayki Abramczyk Cece Dong - MSFT

从PowerShell中的字符串中提取值(使用Regex)

  •  0
  • Shayki Abramczyk Cece Dong - MSFT  · 技术社区  · 6 年前

    我有以下文件:

    <Mapping ServerPath="$/Test/Dev/test/sunday/project" LocalPath="$(SourceDir)\Test" Version="Latest" WorkspaceMappingType="Map">
    <Mapping ServerPath="$/Test/Dev/test/aaa/project2" LocalPath="$(SourceDir)\Test\project" Version="Latest" WorkspaceMappingType="Map">
    <Mapping ServerPath="$/Test/Dev/test/sunday/project/test" LocalPath="$(SourceDir)\Test-machine" Version="Latest" WorkspaceMappingType="Map">
    <Mapping ServerPath="$/Test/Dev/test/besaide/monday" LocalPath="$(SourceDir)\Monday" Version="Latest" WorkspaceMappingType="Map">
    

    ServerPath="$/Path"
    
    LocalPath="$(SourceDir)\Path"
    

    我使用以下方法将文件内容保存在PS变量中:

    $file = Get-Content C:\test\file.txt
    

    现在我如何用Regex从每行中检索2个值?(如果可能,也可以不使用Regex)。

    2 回复  |  直到 5 年前
        1
  •  4
  •   Mathias R. Jessen    6 年前

    除了缺少结束标记之外,您所显示的输入看起来像一个XML变体。如果是这样的话,我建议使用XML工具而不是regex:

    Select-Xml -Path path\to\file.xml -XPath '//Mapping[@ServerPath and @LocalPath]'|%{
        # grab the values of these
        $_.Node.ServerPath
        $_.Node.LocalPath
    }
    
        2
  •  1
  •   Raj Sappidi    6 年前

    $input_path = 'C:\inputpath.txt'
    $output_file = 'C:\outputpath.txt'
    $regex = 'ServerPath=[^\s]+|LocalPath=[^\s]+'
    select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file