2014年8月26日火曜日

◆検索文字列をハイライト表示する

環境変数に目的のパスが含まれているか確認したいことは良くあるが、結構なが~いのが普通なので年寄が目視で確認するのはちと辛い。

メモ帳に貼り付けて検索すれば事足りるのだが、やっぱりここはPowerShellでやってみたい。

幸いファイル群から文字列を検索してハイライト表示するスクリプトが以下で公開されていた。
Wes' Puzzling Blog - Powershell script to find strings and highlight them in the output

(通常はこちらのほうが使いでがあると思われる。)

とりあえずこれをそのまま利用させていただいて単純な文字列からのパターン検索に変更した。
やっつけで変更したので中身はほとんど理解していない・・・。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034

function Write-HostAndHighlightPattern(
  
[string] $pattern = ""
  , [string] $inputtext = ""
  , [switch] $caseSensitive = $false
)
{

 
if ($pattern -eq $null -or $pattern -eq ""
) { 
   
Write-Error "Please provide a search pattern!" ; return
 }

 
$regexPattern = $pattern
  if($caseSensitive -eq $false) { $regexPattern = "(?i)$regexPattern"
 }
 
$regex = New-Object System.Text.RegularExpressions.Regex $regexPattern

  $index = 0
  while($index -lt $inputText.
Length)
  {
   
$match = $regex.Match($inputText, $index
)
   
if($match.Success -and $match.Length -gt 0
)
    {
     
Write-Host $inputText.
SubString(
       
$index, $match.Index - $index) -nonewline
      Write-Host $match.Value.ToString() -Foreground Red -nonewline
      $index = $match.Index + $match.
Length
    }
   
else
    {
     
Write-Host $inputText.SubString($index) -nonewline
      $index = $inputText.
Length
    }
  }
}


Write-HostAndHighlightPattern "system32" $env:path

結果

image

0 件のコメント:

コメントを投稿