微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Powershell中使用Select-String匹配“foo”和“bar”?

如何解决如何在Powershell中使用Select-String匹配“foo”和“bar”?

如何在一个语句中匹配 get the result 个这些 Select-String

posh> 
posh> $string = Get-Content /home/nicholas/powershell/regex/text.txt
posh> $patternFoo = 'foo'                                           
posh> $patternBar = 'bar'
posh> $string | Select-String $patternFoo -AllMatches | Select-String $patternBar -AllMatches

jfkldafdjlfoofkldasjf jfkdla jfklsadfj fklsdfjbarfjkdlafj

posh> 
posh> $string


fjdksalfoofjdklsafjdk fjdkslajfd fdjksalfj fjdkaslfdls

jfkldafdjlfoofkldasjf jfkdla jfklsadfj fklsdfjbarfjkdlafj

posh> 

希望在单个 pattern 中匹配“foo”和“bar”。

解决方法

使用多个积极的前瞻断言,每个断言扫描整个输入行(非贪婪):

'a bar foo ...' | Select-String '(?=.*?foo)(?=.*?bar)'

注意

  • 此方法也可用作 Select-String 周围的 wrapper 函数,名为 Select-StringAll,在此 MIT-licensed Gist 中.

  • 假设您已查看链接的代码以确保其安全(我个人可以向您保证,但您应该始终检查),您可以按如下方式直接安装:

    irm https://gist.github.com/mklement0/356acffc2521fdd338ef9d6daf41ef07/raw/Select-StringAll.ps1 | iex
    

定义这个函数后,上面命令的等价物是:

'a bar foo ...' | Select-StringAll foo,bar
,

可能的解决方案或解决方案的方法:

PS /home/nicholas> 
PS /home/nicholas> $pattern = '\w*(?<!foo)bar'                  
PS /home/nicholas> 
PS /home/nicholas> $string = Get-Content /home/nicholas/powershell/regex/text.txt
PS /home/nicholas> $pattern = '\w*(?<!foo)bar'                                   
PS /home/nicholas> $string | Select-String $pattern

jfkldafdjlfoofkldasjf jfkdla jfklsadfj fklsdfjbarfjkdlafj

PS /home/nicholas> 

感谢:

https://stackoverflow.com/a/9306228/4531180

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。