如何在PowerShell中输出正则匹配项之前的指定关联行内容
PowerShell 实现方案
下面提供两种常用实现方式,均可适配任意数量的重复结构,自动过滤无对应Secret Key的Application Name条目:
方法1:逐行遍历法(推荐大文件使用)
该方案逐行读取文件,内存占用极低,逻辑清晰易修改:
# 定义临时变量存储上一行内容 $lastAppLine = $null # 逐行处理目标文件 Get-Content .\example.txt | ForEach-Object { # 当前行匹配Secret Key格式时,输出上一行的Application Name和当前行 if ($_ -match '^\s*Secret Key:') { $lastAppLine $_ } # 更新上一行记录 $lastAppLine = $_ } # 如需将结果保存到新文件,在末尾追加:| Out-File .\output.txt -Encoding UTF8
方法2:正则全文匹配法(代码更简洁)
适合文件体积不大的场景,一次性匹配所有符合要求的连续条目:
# 读取文件全部内容 $fileContent = Get-Content .\example.txt -Raw # 正则匹配连续的Application Name+Secret Key行 $matchedItems = [regex]::Matches($fileContent, '(^\s*Application Name:.*\r?\n\s*Secret Key:.*)', [System.Text.RegularExpressions.RegexOptions]::Multiline) # 输出所有匹配结果 $matchedItems.Value # 如需保存到文件同样追加:| Out-File .\output.txt -Encoding UTF8
自定义调整提示
如果需要对Application Name的取值加额外过滤规则(比如仅匹配名称以XYZ开头的条目),只需调整对应正则即可,比如方法1可以修改为:
if ($lastAppLine -match '^\s*Application Name:\s*XYZ' -and $_ -match '^\s*Secret Key:')
内容的提问来源于stack exchange,提问作者Ketul Radadiya
相关产品推荐
相关产品推荐

