Powershell:通过字符串数组过滤文件的内容

时间:2013-02-11 22:32:24

标签: powershell

嘲笑我:

我有一个数据文本文件。我想读它,并且只输出包含在搜索词数组中找到的任何字符串的行。

如果我只想找一根弦,我会这样做:

get-content afile | where { $_.Contains("TextI'mLookingFor") } | out-file FilteredContent.txt

现在,我只需要将“TextI'mLookingFor”作为字符串数组,其中如果$ _包含数组中的任何字符串,则将其传递到管道外的文件。

我将如何做到这一点(顺便说一句,我是ac#程序员黑客攻击这个PowerShell脚本,所以如果有更好的方法来完成我的匹配而不是使用.Contains(),请告诉我!)

4 个答案:

答案 0 :(得分:31)

试试Select-String。它允许一系列模式。例如:

$p = @("this","is","a test")
Get-Content '.\New Text Document.txt' | Select-String -Pattern $p -SimpleMatch | Set-Content FilteredContent.txt

请注意,我使用-SimpleMatch,以便Select-String忽略特殊的正则表达式字符。如果你想在模式中使用正则表达式,只需删除它。

对于单个模式我可能会使用它,但你必须在模式中转义正则表达式字符:

Get-Content '.\New Text Document.txt' | ? { $_ -match "a test" }

Select-String对于单个模式来说也是一个很棒的cmdlet,它只需要几个字符来编写^^

答案 1 :(得分:2)

任何帮助?

$a_Search = @(
    "TextI'mLookingFor",
    "OtherTextI'mLookingFor",
    "MoreTextI'mLookingFor"
    )


[regex] $a_regex = ‘(‘ + (($a_Search |foreach {[regex]::escape($_)}) –join “|”) + ‘)’

(get-content afile) -match $a_regex 

答案 2 :(得分:2)

没有正则表达式并且可能有空格:

$array = @("foo", "bar", "hello world")
get-content afile | where { foreach($item in $array) { $_.contains($item) } } > FilteredContent.txt

答案 3 :(得分:1)

$a = @("foo","bar","baz")
findstr ($a -join " ") afile > FilteredContent.txt