20

猜我这个:

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

如果我只寻找一个字符串,我会做这样的事情:

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

现在,我只需要“TextI'mLookingFor”是一个字符串数组,如果 $_ 包含数组中的任何字符串,它会通过管道传递到输出文件。

我将如何做到这一点(顺便说一句,我是 ac# 程序员破解这个 powershell 脚本,所以如果有比使用 .Contains() 更好的方法来完成我的匹配,请提示我!)

4

4 回答 4

40

试试Select-String。它允许一系列模式。前任:

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

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

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

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

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

于 2013-02-11T22:44:14.510 回答
5

有什么帮助吗?

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


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

(get-content afile) -match $a_regex 
于 2013-02-11T22:51:33.770 回答
3

没有正则表达式和可能的空格:

$array = @("foo", "bar", "hello world")
get-content afile | where { foreach($item in $array) { $_.contains($item) } } > FilteredContent.txt
于 2013-02-12T01:26:34.780 回答
1
$a = @("foo","bar","baz")
findstr ($a -join " ") afile > FilteredContent.txt
于 2013-02-11T23:09:23.287 回答