199

に相当する PowerShell を探していgrep --file=filenameます。ご存じない場合はgrep、filename はテキスト ファイルで、各行には照合する正規表現パターンが含まれています。

明らかな何かが欠けているのかもしれSelect-Stringませんが、このオプションはないようです。

4

9 に答える 9

219

-PatternパラメーターはSelect-String、パターンの配列をサポートしています。だからあなたが探しているものは次のとおりです:

Get-Content .\doc.txt | Select-String -Pattern (Get-Content .\regex.txt)

doc.txtこれは、すべての正規表現(1行に1つ)を使用してテキストファイルを検索しますregex.txt

于 2013-03-04T12:06:58.253 に答える
113
PS) new-alias grep findstr
PS) C:\WINDOWS> ls | grep -I -N exe

105:-a---        2006-11-02     13:34      49680 twunk_16.exe
106:-a---        2006-11-02     13:34      31232 twunk_32.exe
109:-a---        2006-09-18     23:43     256192 winhelp.exe
110:-a---        2006-11-02     10:45       9216 winhlp32.exe

PS) grep /?
于 2014-01-04T02:48:56.057 に答える
46

私はgrepに慣れていませんが、Select-Stringを使用すると次のことができます:

Get-ChildItem filename.txt | Select-String -Pattern <regexPattern>

Get-Content を使用してそれを行うこともできます。

(Get-Content filename.txt) -match 'pattern'
于 2013-03-04T11:28:45.237 に答える
0

しかし、select-Stringにはこのオプションがないようです。

正しい。PowerShell は、*nix シェルのツールセットのクローンではありません。

ただし、そのようなものを自分で構築することは難しくありません。

$regexes = Get-Content RegexFile.txt | 
           Foreach-Object { new-object System.Text.RegularExpressions.Regex $_ }

$fileList | Get-Content | Where-Object {
  foreach ($r in $regexes) {
    if ($r.IsMatch($_)) {
      $true
      break
    }
  }
  $false
}
于 2013-03-04T10:37:02.650 に答える
0

多分?

[regex]$regex = (get-content <regex file> |
foreach {
          '(?:{0})' -f $_
        }) -join '|'

Get-Content <filespec> -ReadCount 10000 |
 foreach {
           if ($_ -match $regex)
             {
              $true
              break
             }
         }
于 2013-03-04T12:07:30.147 に答える