问题描述
如何在一个语句中匹配 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>
感谢: