GrepのようなPowershell cmdlet
1 2 3 4 5 6 |
PS C:\> ps | Select-String iexplore System.Diagnostics.Process (iexplore) System.Diagnostics.Process (iexplore) System.Diagnostics.Process (iexplore) System.Diagnostics.Process (iexplore) |
Aliasに設定します
1 |
PS C:\> Set-Alias grep Select-String |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 |
PS C:\> Get-Help Select-String -full 名前 Select-String 概要 文字列とファイルのテキストを検索します。 構文 Select-String [-Path] <string[]> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>] Select-String -InputObject <psobject> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>] 説明 Select-String コマンドレットは、入力文字列およびファイル内でテキストとテキスト パターンを検索します。このコマンドレ ットは、UNIX の Grep および Windows の Findstr と同じように使用できます。 Select-String は、テキストの行を基準にします。既定では、Select-String は各行で最初の一致を検索します。また一致ごと に、一致が含まれる行のファイル名、行番号、およびすべてのテキストを表示します。 ただし、1 行あたり複数の一致を検出するか、一致の前後にあるテキストを表示するか、または一致が見つかったかどうかを示 すブール値 (True または False) のみを表示するように、このコマンドレットに指示することができます。 Select-String は正規表現による一致を使用しますが、入力文字列内で指定のテキストを検索する単純一致を実行することもで きます。 Select-String では、テキストのすべての一致を表示したり、各入力ファイルで最初の一致が検出されたところで停止したりで きます。このコマンドレットは、指定したパターンに一致しないすべてのテキストも表示できます。 Unicode テキストのファイルを検索する場合など、Select-String が特定の文字エンコードを想定するように指定することもで きます。 パラメーター -AllMatches [<SwitchParameter>] テキストの各行で複数の一致を検索します。このパラメーターがない場合、Select-String は、テキストの各行で最初の一 致のみを検索します。 Select-String がテキストの 1 つの行で複数の一致を検出した場合、その行に対して 1 つの MatchInfo オブジェクトを生 成するだけですが、オブジェクトの Matches プロパティにはすべての一致が含まれます。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -CaseSensitive [<SwitchParameter>] 一致を調べる際に大文字と小文字が区別されます。既定では、大文字と小文字は区別されません。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -Context <Int32[]> 一致を含む行の前後にある行について、指定した行数分をキャプチャします。これにより、一致をコンテキストと共に表示 できます。 1 つの数字をこのパラメーターの値として入力した場合、その数字は、一致の前後にある行についてキャプチャする行数を 表します。2 つの数字をこのパラメーターの値として入力した場合、1 番目の数字は一致の前にある行数を、2 番目の数字 は一致の後にある行数を表します。 既定では、一致を含む行は、画面の最初の列に終了角かっこ (ASCII 62) で表示されます。マークされていない行はコンテ キストです。 このパラメーターを指定しても、Select-String で生成されるオブジェクトの数は変更されません。Select-String では、 一致ごとに 1 つの MatchInfo (Microsoft.PowerShell.Commands.MatchInfo) オブジェクトが生成されます。コンテキスト は、オブジェクトの Context プロパティに文字列の配列として保存されます。 パイプを使用して Select-String コマンドの出力を他の Select-String コマンドに渡す場合、受け取り側のコマンドでは 、コンテキストの行にあるテキストではなく、一致を含む行にあるテキスト (MatchInfo オブジェクトの Line プロパティ の値) のみが検索されます。その結果、受け取り側の Select-String コマンドでは、Context パラメーターが無効になりま す。 コンテキストに一致が含まれている場合、各一致の MatchInfo オブジェクトにはコンテキストのすべての行が含まれます。 ただし、画面には重複する行が一度だけ表示されます。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -Encoding <string> Select-String がファイルを検索する際に使用する文字エンコードを指定します。既定値は UTF8 です。 指定可能な値は、"UTF7"、"UTF8"、"UTF32"、"ASCII"、"Unicode"、"BigEndianUnicode"、"Default"、および "OEM" です。 Default を指定した場合、システムの現在の ANSI コード ページのエンコードが使用されます。OEM を指定した場合、オペ レーティング システムの現在の OEM コード ページ識別子が使用されます。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -Exclude <string[]> 指定された項目を除外します。このパラメーターの値は、Path パラメーターを修飾します。"*.txt" などのパス要素または パターンを入力します。ワイルドカードを使用できます。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -Include <string[]> 指定された項目のみを含めます。このパラメーターの値は、Path パラメーターを修飾します。"*.txt" などのパス要素また はパターンを入力します。ワイルドカードを使用できます。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -InputObject <psobject> 検索するテキストを指定します。テキストが格納されている変数を入力するか、テキストを取得するコマンドまたは式を記 述します。 必須 true 位置 named 既定値 パイプライン入力を許可する true (ByValue) ワイルドカード文字を許可する false -List [<SwitchParameter>] 各入力ファイルの最初の一致のみを返します。既定では、Select-String は、検出した一致のそれぞれに対して MatchInfo オブジェクトを返します。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -NotMatch [<SwitchParameter>] 指定したパターンに一致しないテキストを検索します。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -Path <string[]> 検索するファイルのパスを指定します。ワイルドカードを使用できます。既定の場所はローカル ディレクトリです。 "log1.txt"、"*.doc"、"*.*" など、ディレクトリ内のファイルを指定します。ディレクトリのみを指定すると、コマンドは 実行されません。 必須 true 位置 2 既定値 パイプライン入力を許可する true (ByPropertyName) ワイルドカード文字を許可する false -Pattern <string[]> 検索するテキストを指定します。文字列または正規表現を入力します。文字列を入力する場合、SimpleMatch パラメーター を使用します。 正規表現の詳細については、「about_Regular_Expressions」を参照してください。 必須 true 位置 1 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -Quiet [<SwitchParameter>] MatchInfo オブジェクトの代わりに、ブール値 (True または False) を返します。このブール値は、指定したパターンを検 出した場合は "True"、それ以外の場合は "False" になります。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false -SimpleMatch [<SwitchParameter>] 正規表現による一致ではなく、単純一致を使用します。単純一致では、Select-String は入力文字列内で Pattern パラメー ターのテキストを検索します。このコマンドレットは、Pattern パラメーターの値を正規表現ステートメントとして解釈し ません。 必須 false 位置 named 既定値 パイプライン入力を許可する false ワイルドカード文字を許可する false <CommonParameters> このコマンドレットは、次の共通パラメーターをサポートします: Verbose、 Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、 OutBuffer、および OutVariable。詳細については、 「get-help about_commonparameters」と入力してヘルプを参照してください。 入力 System.Management.Automation.PSObject パイプを使用して、ToString メソッドを含むあらゆるオブジェクトを Select-String に渡すことができます。 出力 Microsoft.PowerShell.Commands.MatchInfo または System.Boolean 既定では、出力は一連の MatchInfo オブジェクトです (検出した一致ごとに 1 つずつ)。Quiet パラメーターを指定した場 合、出力はパターンが見つかったどうかを示すブール値になります。 メモ Select-String は、UNIX の Grep コマンドおよび Windows の FindStr コマンドに似ています。 Select-String を使用するには、検索するテキストを Pattern パラメーターの値として入力します。 検索するテキストを指定するには、以下の手順に従います。 -- 引用符で囲まれた文字列にテキストを入力し、パイプを使用してテキストを Select-String に渡します。 -- 変数にテキスト文字列を格納し、この変数を InputObject パラメーターの値として指定します。 -- テキストをファイルに格納する場合、Path パラメーターを使用してファイルのパスを指定します。 既定では、Select-String は Pattern パラメーターの値を正規表現として解釈します (詳細については、「about_Regular_ Expressions」を参照してください)。ただし、SimpleMatch パラメーターを使用すると、正規表現による一致をオーバーラ イドできます。SimpleMatch パラメーターでは、入力文字列内で Pattern パラメーター値のインスタンスが検出されます。 既定では、Select-String の出力は、一致に関する詳細情報を含む MatchInfo オブジェクトです。MatchInfo オブジェクト には Filename や Line などのプロパティがあるので、このオブジェクトの情報はファイル内のテキストを検索する場合に 便利です。入力がファイル以外の場合、これらのパラメーターの値は InputStream です。 MatchInfo オブジェクトの情報が必要ない場合は、Quiet パラメーターを使用します。これにより、MatchInfo オブジェク トの代わりに、一致を検出したかどうかを示すブール値 (True または False) が返されます。 語句を照合する際に、Select-String はシステムに設定されている現在のカルチャを使用します。現在のカルチャを検索す るには、Get-Culture コマンドレットを使用します。 MatchInfo オブジェクトのプロパティを見つけるには、次のように入力します。 select-string -path test.txt -pattern "test" | get-member | format-list -property * -------------------------- 例 1 -------------------------- C:\PS>"Hello","HELLO" | select-string -pattern "HELLO" -casesensitive 説明 ----------- このコマンドは、パイプを使用して Select-String コマンドに渡されたテキストを、大文字と小文字を区別して照合します。 その結果、"Hello" は一致しないので、Select-String は "HELLO" のみを検出します。 引用符で囲まれた文字列はそれぞれ 1 行として扱われるので、CaseSensitive パラメーターがない場合、Select-String はこの 両方の文字列を一致として認識します。 -------------------------- 例 2 -------------------------- C:\PS>select-string -path *.xml -pattern "the the" 説明 ----------- このコマンドは、現在のディレクトリ内のファイル名拡張子が .xml のファイルをすべて検索し、これらのファイル中の "the t he" という文字列を含む行を表示します。 -------------------------- 例 3 -------------------------- C:\PS>select-string -path $pshome\en-US\*.txt -pattern "@" 説明 ----------- このコマンドは、Windows PowerShell の概念説明のヘルプ ファイル (about_*.txt) 内で、アットマーク (@) の使用に関する 情報を検索します。 このコマンドでは、パスを示すために $pshome 自動変数の値を使用します。この変数には、Windows PowerShell のインストー ル ディレクトリのパスが格納されます。この例では、Windows PowerShell 用の英語 (米国) のヘルプ ファイルが含まれている en-US サブディレクトリを検索します。 -------------------------- 例 4 -------------------------- C:\PS>function search-help { $pshelp = "$pshome\es\about_*.txt", "$pshome\en-US\*dll-help.xml" select-string -path $pshelp -pattern $args[0] } 説明 ----------- この単純な関数は、Select-String コマンドレットを使用して、Windows PowerShell ヘルプ ファイル内の特定の文字列を検索 します。この例では、en-US サブディレクトリ内で英語 (米国) のファイルを検索します。 関数を使用して psdrive などの文字列を検索するには、「search-help psdrive」と入力します。 任意の Windows PowerShell コンソールでこの関数を使用するには、お使いのシステムで Windows PowerShell ヘルプ ファイル をポイントするパスを変更し、関数を Windows PowerShell プロファイルに貼り付けます。 -------------------------- 例 5 -------------------------- C:\PS>$events = get-eventlog -logname application -newest 100 C:\PS> $events | select-string -inputobject {$_.message} -pattern "failed" 説明 ----------- この例では、イベント ビューアーの Application ログの最新のイベント 100 件から文字列 "failed" を検索します。 最初のコマンドは、Get-EventLog コマンドレットを使用して、Application イベント ログから最新のイベント 100 件を取得し ます。次に、そのイベントを $events 変数に格納します。 2 番目のコマンドは、パイプライン演算子 (|) を使用して、$events 変数に格納されているオブジェクトを Select-String に 送信します。このコマンドは InputObject パラメーターを使用して、$events 変数からの入力を表します。InputObject パラメ ーターの値は、パイプラインを移動する各オブジェクトの Message プロパティです。現在のオブジェクトは $_ symbol で表さ れます。 各イベントがパイプラインに到達すると、Select-String は Message プロパティの値で "failed" 文字列を検索し、一致が含ま れているすべての行を表示します。 -------------------------- 例 6 -------------------------- C:\PS>get-childitem c:\windows\system32\* -include *.txt -recurse | select-string -pattern "Microsoft" -casesensitive 説明 ----------- このコマンドは、C:\Windows\System32 のサブディレクトリにあるファイル名拡張子が .txt のすべてのファイルについて "Mic rosoft" という文字列を検索します。CaseSensitive パラメーターは、Select-String で一致が検出されるには、"Microsoft" の "M" が大文字で、残りの文字が小文字である必要があることを示します。 -------------------------- 例 7 -------------------------- C:\PS>select-string -path process.txt -pattern idle, svchost -notmatch 説明 ----------- このコマンドは、Process.txt ファイルで、単語 "idle" または "svchost" を含まないテキスト行を検索します。 -------------------------- 例 8 -------------------------- C:\PS>$f = select-string -path audit.log -pattern "logon failed" -context 2, 3 C:\PS> $f.count C:\PS> ($f)[0].context | format-list 説明 ----------- 最初のコマンドは、Audit.Log ファイル内で "logon failed" という語句を検索します。Context パラメーターを使用して、一 致の前の 2 行分と一致の後の 3 行分をキャプチャします。 2 番目のコマンドは、オブジェクト配列の Count プロパティを使用して、検出された一致の数を表示します (この場合は 2)。 3 番目のコマンドは、最初の MatchInfo オブジェクトの Context プロパティに格納された行を表示します。このコマンドは、 配列表記を使用して最初の一致 (0 ベース配列の一致 0 番) を示し、Format-List コマンドレットを使用して Context プロパ ティの値を一覧表示します。 出力は、検出された一致ごとに 1 つずつ、2 つの MatchInfo オブジェクトで構成されます。コンテキストの行は、MatchInfo オブジェクトの Context プロパティに格納されます。 -------------------------- 例 9 -------------------------- C:\PS>$a = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript C:\PS> $b = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript -allmatches C:\PS> $a C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39: Start-Transcript and Stop-Transcript. C:\PS> $b C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39: Start-Transcript and Stop-Transcript. C:\PS>> $a.matches Groups : {Transcript} Success : True Captures : {Transcript} Index : 13 Length : 10 Value : Transcript C:\PS> $b.matches Groups : {Transcript} Success : True Captures : {Transcript} Index : 13 Length : 10 Value : Transcript Groups : {Transcript} Success : True Captures : {Transcript} Index : 33 Length : 10 Value : Transcript 説明 ----------- この例では、Select-String の AllMatches パラメーターの結果について示します。AllMatches パラメーターは、各行の最初の 一致のみを検索するのではなく、行にあるすべてのパターンの一致を検索します。 この例の最初のコマンドは、Windows PowerShell の概念説明のヘルプ ファイル ("about" ヘルプ) 内で、単語 "transcript" のインスタンスを検索します。2 番目のコマンドは、AllMatches パラメーターを使用する点を除いて、最初のコマンドと同じで す。 最初のコマンドの出力は $a 変数に保存されます。2 番目のコマンドの出力は $b 変数に保存されます。 変数の値を表示する場合、既定では出力例のように表示されます。 ただし、5 番目と 6 番目のコマンドは、各オブジェクトの Matches プロパティの値を表示します。最初のコマンドの Matches プロパティには、一致が 1 つだけ含まれています (つまり、1 つの System.Text.RegularExpressions.Match オブジェクト)。 一方、2 番目のコマンドの Matches プロパティには、行内の両方の一致に対応するオブジェクトが含まれています。 |