PowerShell(複数ファイルの置換)

(本記事はPowerShell入門記事としてコチラにもまとめています。)

ForEach-Objectを使って、複数のファイルを置換してみます。
まずは例によってランダムなファイル生成から。

PS C:\Users\takk\aaa> 1..6 | %{$n=1}{$r=random;$dir=$r -replace("(....)","$&\\");mkdir $dir | out-null;1..4 | % {echo $_"   "$r >> $dir/file_$r.txt}}
PS C:\Users\takk\aaa> 

このようなフォルダとファイルができました。

PS C:\Users\takk\aaa> ls -s -n -File
1009\7783\03\file_1009778303.txt
1140\3858\4\file_114038584.txt
1236\9624\05\file_1236962405.txt
1374\5229\22\file_1374522922.txt
8623\1718\5\file_862317185.txt
9398\6818\file_93986818.txt
PS C:\Users\takk\aaa> 

現在の各ファイルの内容は、このようになっています。

PS C:\Users\takk\aaa> ls -s -n -File | %{echo ===$_===;cat $_}
===1009\7783\03\file_1009778303.txt===
1   1009778303
2   1009778303
3   1009778303
4   1009778303
===1140\3858\4\file_114038584.txt===
1   114038584
2   114038584
3   114038584
4   114038584
===1236\9624\05\file_1236962405.txt===
1   1236962405
2   1236962405
3   1236962405
4   1236962405
===1374\5229\22\file_1374522922.txt===
1   1374522922
2   1374522922
3   1374522922
4   1374522922
===8623\1718\5\file_862317185.txt===
1   862317185
2   862317185
3   862317185
4   862317185
===9398\6818\file_93986818.txt===
1   93986818
2   93986818
3   93986818
4   93986818
PS C:\Users\takk\aaa>

では置換します。元のファイルは残したまま置換します。
二行目の末尾に印をつけます。

PS C:\Users\takk\aaa> ls -s -n -File | %{$fname=$_+".newfile";cat $_ | %{ $_ -creplace "^(2.*)$","$& <---" >> $fname}}
PS C:\Users\takk\aaa>

置換前のファイルに加えて、同じフォルダに、置換後のファイルができましたね。

PS C:\Users\takk\aaa> ls -s -n -File
1009\7783\03\file_1009778303.txt
1009\7783\03\file_1009778303.txt.newfile
1140\3858\4\file_114038584.txt
1140\3858\4\file_114038584.txt.newfile
1236\9624\05\file_1236962405.txt
1236\9624\05\file_1236962405.txt.newfile
1374\5229\22\file_1374522922.txt
1374\5229\22\file_1374522922.txt.newfile
8623\1718\5\file_862317185.txt
8623\1718\5\file_862317185.txt.newfile
9398\6818\file_93986818.txt
9398\6818\file_93986818.txt.newfile
PS C:\Users\takk\aaa>

newfileで絞り込みます。

PS C:\Users\takk\aaa> ls -n -s -Filter *.newfile
1009\7783\03\file_1009778303.txt.newfile
1140\3858\4\file_114038584.txt.newfile
1236\9624\05\file_1236962405.txt.newfile
1374\5229\22\file_1374522922.txt.newfile
8623\1718\5\file_862317185.txt.newfile
9398\6818\file_93986818.txt.newfile
PS C:\Users\takk\aaa>

各ファイルの内容はこのようになっています。2行目に印がつきました。

PS C:\Users\takk\aaa> ls -s -n -Filter *.newfile | %{echo ===$_===;cat $_}
===1009\7783\03\file_1009778303.txt.newfile===
1   1009778303
2   1009778303 <---
3   1009778303
4   1009778303
===1140\3858\4\file_114038584.txt.newfile===
1   114038584
2   114038584 <---
3   114038584
4   114038584
===1236\9624\05\file_1236962405.txt.newfile===
1   1236962405
2   1236962405 <---
3   1236962405
4   1236962405
===1374\5229\22\file_1374522922.txt.newfile===
1   1374522922
2   1374522922 <---
3   1374522922
4   1374522922
===8623\1718\5\file_862317185.txt.newfile===
1   862317185
2   862317185 <---
3   862317185
4   862317185
===9398\6818\file_93986818.txt.newfile===
1   93986818
2   93986818 <---
3   93986818
4   93986818
PS C:\Users\takk\aaa>

コメント

  1. […] ← PowerShell(複数ファイルの置換) […]

タイトルとURLをコピーしました