20

これをなぞなぞ:

データのテキストファイルがあります。私はそれを読みたいのですが、検索語の配列で見つかった文字列を含む出力行のみを出力します。

1つの文字列だけを探している場合は、次のようにします。

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

ここで、「TextI'mLookingFor」を文字列の配列にする必要があります。$ _に配列内の文字列が含まれている場合は、パイプを介して出力ファイルに渡されます。

それをどのように行うのでしょうか(そして、ところで、私はこのPowerShellスクリプトをハッキングしているac#プログラマーなので、.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

特別な正規表現文字を無視する-SimpleMatchように使用していることに注意してください。Select-Stringパターンに正規表現が必要な場合は、それを削除してください。

単一のパターンの場合、おそらくこれを使用しますが、パターン内の正規表現文字をエスケープする必要があります。

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

Select-String単一パターンにも最適なコマンドレットです。書くのに数文字長くなります^^

于 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 に答える