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

时间:2018-08-19 14:23:21

标签: regex powershell powershell-v3.0

我有以下文件:

<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 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

要提取这两个路径:

$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