ログファイルや、htmlファイルから『×××で囲まれた部分を抽出したい』要件に遭遇しますがそんな時にはこのスクリプトをベースに回収して適宜使っています。
<# カッコ『()』で囲まれた時 ※\でエスケープしてます#>
$regex = '\(.+?\)'
<# ダブルクォーテーション『""』 で囲まれた時#>
$regex = '".+?"'
<# htmlタグ等(例として)『<t </td>"』 で囲まれた時#>
$regex = '<td.+?</td>'
# 元のファイルパス $sourceFile = 'D:\temp\test2.txt' # 出力ファイルパス $newFile = 'D:\temp\test3.txt' # 対象なしの行を出力ファイルへ出力するか否か $empty_line_out = 0 # 1:出力しない 0:出力する #セパレータ $separator="`t" # 正規表現パターン #$regex = '\(.+?\)' $regex = '".+?"' #$regex = '<td.+?</td>' if(Test-Path $newFile){Remove-Item $newFile} $lno=1 foreach ($line in Get-Content -Encoding "UTF8" $sourceFile) { $ret = [RegEx]::Matches($line, $regex) $lno++ $ret | ForEach-Object -begin { $i=0 $ou="" } -Process { if( $i -gt 0) { $ou=$ou +"`t"+$_.value; } else { $ou=$ou + $_.value; } $i++; } -end { if( $i -ge $empty_line_out ) { $stlin = "{0:D10}" -f $lno Write-output $stlin$separator$ou | Out-File $newFile -Encoding default -Append } } } Get-Content $newFile
以下解説
Shift_JISでファイル出力する際は -Encoding default
ファイル出力には「Out-File」を使いますがShift_JISで出力する際は -Encoding defaultを使用します。
Out-File $newFile -Encoding default #Shift_JIS
Out-File $newFile -Encoding String #utf-16 BOM付
Out-File $newFile -Encoding utf8 #utf-8 BOM付