PowerShellの文字列操作と正規表現は、ログ解析・テキスト処理・設定ファイル操作で必須のスキルです。
文字列操作メソッド
$text = " Hello, PowerShell World! "
# トリム
$text.Trim() # 前後の空白を除去
$text.TrimStart() # 前の空白を除去
$text.TrimEnd() # 後の空白を除去
# 検索・置換
$text.IndexOf("PowerShell") # 位置を返す(8)
$text.Replace("World", "Japan") # 置換
# 分割・結合
$csv = "a,b,c,d"
$arr = $csv.Split(",") # @("a","b","c","d")
$joined = $arr -join " - " # "a - b - c - d"
# 書式設定
$name = "Taro"; $age = 25
"名前: {0}, 年齢: {1}歳" -f $name, $age
# 部分文字列
$str = "PowerShell"
$str.Substring(0, 5) # Power
$str[-5..-1] -join "" # Shell(末尾から5文字)正規表現(-match・-replace)
# -match:マッチすると$Matchesに結果が格納される
$log = "2026-04-23 ERROR: Connection timeout (code=500)"
if ($log -match "(\d{4}-\d{2}-\d{2}).*?(ERROR|WARN|INFO).*?code=(\d+)") {
Write-Host "日付: $($Matches[1])"
Write-Host "レベル: $($Matches[2])"
Write-Host "コード: $($Matches[3])"
}
# -replace:正規表現で置換
$phone = "090-1234-5678"
$masked = $phone -replace "(\d{3})-(\d{4})-(\d{4})", '$1-****-****'
Write-Host $masked # 090-****-****
# IPアドレスを全て抽出
$text = "ホスト1: 192.168.1.1, ホスト2: 10.0.0.1"
$ips = [regex]::Matches($text, "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
$ips | ForEach-Object { Write-Host $_.Value }Select-String(grepのPowerShell版)
# ファイルからパターンに一致する行を検索
Select-String -Path C:\logs\*.log -Pattern "ERROR"
Select-String -Path C:\logs\app.log -Pattern "timeout" -CaseSensitive
# 結果からファイル名・行番号・内容を取得
Select-String -Path C:\logs\*.log -Pattern "CRITICAL" |
ForEach-Object {
Write-Host "$($_.Filename):$($_.LineNumber): $($_.Line)"
}
# 正規表現で複数パターン
Select-String -Path app.log -Pattern "ERROR|WARN|CRITICAL"ログ解析でSelect-Stringを使い始めると、Linuxのgrepと同等のことがWindows上でもできると実感します。特に-Patternで正規表現が使えるのと、結果オブジェクトからFilename・LineNumber・Lineを取り出せるのが便利です。
hobbyshift管理人
まとめ
- Split・Join・Replace・SubstringなどC#と同じ文字列メソッドが使える
- -matchは正規表現マッチで$Matchesにキャプチャグループが格納される
- -replaceは正規表現置換、$1・$2でキャプチャグループを参照できる
- Select-StringはLinuxのgrepに相当し、ファイル検索・ログ解析に威力を発揮する



コメント