Powershellで複数ファイルの中身を一括置換する方法をメモ。
昨日のsedのPowershell版です。
確認環境
# 検証環境 PS C:\Users\hoge\Desktop\replace_test> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 5 1 18362 1110
複数ファイルの中身を一括置換
処理対象ファイル
# Get-ChldItem結果をforeachで処理することで # find->xargs->headのような処理結果とすることができました PS C:\Users\hoge\Desktop\replace_test> Get-ChildItem . |` %{$_.name; echo ======; cat $_.Name; echo ""} one.txt ====== first second third three.txt ====== first second third two.txt ====== first second third
処理実行
# 直接ファイルにリダイレクトせず、いったん変換結果を変数に格納して、それをリダイレクトするのがポイントのようです # 直接ファイルにリダイレクトしたら、エラーこそ出ませんでしたがファイルの中身が空っぽになってしまいました PS C:\Users\hoge\Desktop\replace_test> Get-ChildItem . |` %{ $replaced = $(Get-Content $_.Name) -replace "first","FIRST"; $replaced > $_.Name } PS C:\Users\hoge\Desktop\replace_test> Get-ChildItem . |` %{$_.name; echo ======; cat $_.Name; echo ""} one.txt ====== FIRST second third three.txt ====== FIRST second third two.txt ====== FIRST second third