テキストファイルを読み込み特定の文字列を置換して更新する。
比較的よくあるパターンではないだろうか。
PowershellではReplace演算子を使って置換ができる。StringクラスのReplaceメソッドと違うのは、こちらは正規表現が使える事だろうか。
$filepath = "d:\desktop\test.txt" Copy-Item "d:\desktop\test2.txt" "d:\desktop\test.txt" Get-Content $filepath | tee -Variable Giants "--------------" $Giants -replace "木村 正太","沢村 拓一" | tee -FilePath $filepath "--------------" Get-Content $filepath | Set-Variable Giants $Giants -replace "(\w*) (\w*)",'$2 $1' | tee -FilePath $filepath "--------------" $tempfile = [System.IO.Path]::GetTempFileName() Get-Content $filepath | %{$_ -replace "^\d.*",'$0 選手' | Add-Content $tempfile} del $filepath Move-Item $tempfile $filepath Get-Content $filepath |
結果はこんな感じ。
PS D:\Desktop> d:\Desktop\Giants.ps1 11 久保 裕也 13 高木 康成 15 木村 正太 17 東野 峻 19 土本 恭平 20 豊田 清 22 越智 大祐 26 内海 哲也 28 金刃 憲人 -------------- 11 久保 裕也 13 高木 康成 15 沢村 拓一 17 東野 峻 19 土本 恭平 20 豊田 清 22 越智 大祐 26 内海 哲也 28 金刃 憲人 -------------- 11 裕也 久保 13 康成 高木 15 拓一 沢村 17 峻 東野 19 恭平 土本 20 清 豊田 22 大祐 越智 26 哲也 内海 28 憲人 金刃 -------------- 11 裕也 久保 選手 13 康成 高木 選手 15 拓一 沢村 選手 17 峻 東野 選手 19 恭平 土本 選手 20 清 豊田 選手 22 大祐 越智 選手 26 哲也 内海 選手 28 憲人 金刃 選手 |
まず、$Giants変数にテキストを読み込みReplace演算子で単純に置換した後、ファイルに書き戻している。
次に同変数に読み込みなおした後、今度は正規表現を使って姓と名を入れ替える。
それほど大きくないファイルの場合はこれで良いと思うが、大きなファイルの場合はその次のようにパイプ処理にて順次処理しながら一時ファイルに出力し最後にファイルを入れ替える。
ここでは単純に末尾に「選手」を付加している。
Tee-Objectコマンドレットは変数への設定やファイル出力と同時に画面にも表示してくれるコマンド。
正規表現の詳細についてはどこか詳しいサイトを参照してほしい。
0 件のコメント:
コメントを投稿