首页 > 解决方案 > 通过 Powershell 从文本文件中提取字符串

问题描述

我一直在尝试使用 PowerShell 从 .txt 文件中的多行中提取某些值。

Host
Class
INCLUDE vmware:/?filter=Displayname Equal "server01" OR Displayname Equal "server02" OR Displayname Equal "server03 test"

这就是我要的 :

server01
server02
server03 test

到目前为止我有代码:

$Regex = [Regex]::new("(?<=Equal)(.*)(?=OR")           
$Match = $Regex.Match($String)

标签: regexpowershell

解决方案


您可以使用

[regex]::matches($String, '(?<=Equal\s*")[^"]+')

请参阅正则表达式演示

在此处查看更多提取多个匹配项的方法。但是,您的主要问题是正则表达式模式。(?<=Equal\s*")[^"]+模式匹配:

  • (?<=Equal\s*")- 一个位置前面有Equal0+ 个空格,然后是"
  • [^"]+- 消耗 1+ 字符而不是双引号。

演示:

$String = "Host`nClass`nINCLUDE vmware:/?filter=Displayname Equal ""server01"" OR Displayname Equal ""server02"" OR Displayname Equal ""server03 test"""
[regex]::matches($String, '(?<=Equal\s*")[^"]+') | Foreach {$_.Value}

输出:

server01
server02
server03 test

这是读取文件、获取所有匹配项并保存到文件的完整片段:

$newfile = 'file.txt'
$file = 'newtext.txt'
$regex = '(?<=Equal\s*")[^"]+'
Get-Content $file | 
     Select-String $regex -AllMatches | 
     Select-Object -Expand Matches | 
     ForEach-Object { $_.Value } |
     Set-Content $newfile

推荐阅读