首页 > 解决方案 > 如何使用命令 Select-String grep 两个字符串,使用正则表达式 `(str1|str2)`

问题描述

Q1:如何在 Select-String 中得到最短的匹配结果?

对于命令参数:

-source_file "proccess.log" -regex "D\:\\.*\.'(zip|7z|rar)'"

使用电源外壳文件:

    param(
    # Enter Source File Path
    [Parameter(Mandatory=$True,Position=0)]
    [ValidateNotNull()]
    [string]$source_file,
    # regex
    [Parameter(Mandatory=$True,Position=1)]
    [ValidateNotNull()]
    [string]$regex
    )

    $result3=Get-Content -Path $source_file |Select-String -Pattern "$regex"|foreach {$_.Matches.Value}
    Write-Output $result3

它总是输出最长的匹配字符串D:\test.zip D:\string1.zip" " D:\string2.rar ,比如我怎么能得到输出结果,比如:

D:\test.zip
D:\string1.zip
D:\string2.rar

然后我可以处理异常情况。

解决问题 1:

-source_file "proccess.log" -AllMatches -regex "D\:\\.*?\.'(zip|7z|rar)'"

感谢@AdminOfThings 的回答!

PS问题2是:为什么在正则表达式中使用括号必须用撇号结束?正则表达式是由猜测编写的......并且它有效。但我不知道为什么。

标签: powershell

解决方案


推荐阅读