特定の文字列を含むテキストファイルの行を一括で入れ替えるPowershellスクリプト。
「KEYWORD」という文字列を含む行を「testtesttesttesttesttest」という行に入れ替える。
対象のテキストファイルは、C:\temp\powershell\test-data.txt
$filepath = "C:\temp\powershell\test-data.txt" $file = Get-Content -Path $filepath $afterline = "testtesttesttesttesttest" $match_list = Select-String "KEYWORD" $filepath | ForEach-Object { $($_ -split":")[2] } foreach ($line in $match_list) { $file[$line-1] = $afterline $file | Out-File $filepath }
スクリプト実行前のC:\temp\powershell\test-data.txt
00000000000000000000000000000000 11111111111111111111111111111111 222222222222222222222KEYWORD2222 33333333333333333333333333333333 44444444444444444444444444444444 55555555555555555555555555555555 66666666666666666666666666666666 77777KEYWORD77777777777777777777 88888888888888888888888888888888 99999999999999999999999999999999
スクリプト実行後のC:\temp\powershell\test-data.txt
00000000000000000000000000000000 11111111111111111111111111111111 testtesttesttesttesttest 33333333333333333333333333333333 44444444444444444444444444444444 55555555555555555555555555555555 66666666666666666666666666666666 testtesttesttesttesttest 88888888888888888888888888888888 99999999999999999999999999999999
Get-Contentでファイルを$fileに読み込むと、
一行ずつが$fileの一つの配列の要素として取り込まれる。
Select-Stringで文字列を検索して対象の行番号(配列番号)を取得して、
対象の配列の内容を置き換えている。
検索対象の文字列には、「<」や「>」なども指定可能。
配列の開始番号は0で、
行の開始番号は1なので、
文字列を検索して出力された行番号から1をマイナスすることで、
配列の指定を調整している。