ファイル内のテキストを PowerShell を使用して置き換える方法
-
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために
Get-ContentとSet-Contentを使用する -
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために
Fileクラスを使用する - PowerShell を使用して複数のファイル内の文字列のすべての出現を置き換える
- 結論
PowerShell は、ファイルとフォルダーを管理するための強力なツールです。それを使用すると、システム上のファイルとフォルダーを作成、コピー、削除、移動、名前変更、および表示できます。
このチュートリアルでは、PowerShell を使用してファイル内のすべての文字列の出現を置き換えるさまざまな方法を紹介します。
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために Get-Content と Set-Content を使用する
'Get-Content'コマンドは、指定されたパスのアイテムの内容を取得し、ファイル内のテキストなどを取得します。'Set-Content' cmdlet は、新しい内容をファイルに追加するか、既存の内容を置き換えることができる文字列処理ツールです。
Get-Content と Set-Content cmdlet を使用して、ファイル内のすべての文字列の出現を置き換えることができます。
構文:
(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'
構文では、'OldString'を置き換えたい文字列に、'NewString'をその代わりに挿入したい文字列に置き換えます。'Path\to\Your\File.txt'は、実際のファイルパスに置き換えてください。
例を挙げましょう。ディレクトリ(C:\New)に以下の内容のテキストファイル(test.txt)があります。
Get-Content C:\New\test.txt
出力:
Welcome to Linux tutorials.
Linux is free.
Linux is powerful.
今、-Replace パラメータの助けを借りて、test.txt ファイル内の文字列'Linux'のすべての出現を'PowerShell'に置き換えましょう。Get-Content の周りには、カッコ () が必要です。
(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
次に、test.txt ファイルの内容を表示して、変更を確認します。
Get-Content C:\New\test.txt
ご覧のように、Linux が PowerShell に成功裏に置き換えられました。
出力:
Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.
この方法は、Get-Content cmdlet が配列を返すため、ファイル内の文字列を見つけて置き換えるために文字列配列を使用します。Get-Content が単一の文字列を返す場合、文字列を置き換えるのが容易になります。
以下のように、-Raw パラメータを使用できます。-Raw パラメータは、'C:\New\test.txt'の内容が単一の文字列として読み取られることを保証し、ファイル全体で'Linux'を'PowerShell'に効率的に置き換えることを可能にします。
(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
このコードでは、'C:\New\test.txt'にあるファイルの内容を単一の文字列として読み取ります。その後、-Replace 演算子を使用して、その文字列内のすべての'Linux'の出現を'PowerShell'に置き換えます。
最後に、変更された内容を同じファイルに保存し、新しいテキストで更新します。このコードは、PowerShell を使用してファイル内のテキストを置き換えるための簡単な方法です。
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために File クラスを使用する
File クラスは、単一のファイルを作成、コピー、移動、開く、削除、追加するといった一般的な操作のための静的メソッドを提供します。指定されたファイルの内容を置き換えるために File クラスの Replace() メソッドを使用してください。
構文:
$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)
パラメーター:
"FilePath": これは実際のファイルパスに置き換える必要があります。"OldString": これは置き換えたい文字列です。"NewString": これは置き換えたい文字列です。
ReadAllText() メソッドは、テキストファイルを開き、そのファイル内のすべてのテキストを読み取り、ファイルを閉じます。
WriteAllText() メソッドは、新しいファイルを作成し、特定の文字列をそのファイルに書き込み、ファイルを閉じます。ターゲットファイルがすでにその場所に存在する場合は上書きされます。
例を挙げましょう。ディレクトリ(C:\New)に以下の内容のテキストファイル(python.txt)があります。
Get-Content C:\New\python.txt
出力:
Find the best Python tutorials and learn Python easily from DelftStack.
今、File クラスのメソッドを使用して、ファイル内の文字列のすべての出現を置き換えましょう。
$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
上記のコードでは、まず $string という変数を作成します。この変数は、テキスト置き換えを行った後の'C:\New\python.txt'ファイルの修正内容を保存します。[System.IO.File]::ReadAllText("C:\New\python.txt") を使用して、ファイルの内容全体を読み取り、$string に保存します。
次のステップでは、Replace() メソッドを使用して、内容内のすべての"Python"のインスタンスを見つけて"JavaScript"に置き換え、テキストを更新します。最後に、[System.IO.File]::WriteAllText("C:\New\python.txt", $string) を使用して、修正内容を同じファイルに書き込み、元のテキストを上書きし、変更を保持します。
C:\New\python.txt で行った変更を確認してください。
Get-Content C:\New\python.txt
出力:
Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.
出力では、"Python"が"JavaScript"に置き換えられたのがわかります。
PowerShell を使用して複数のファイル内の文字列のすべての出現を置き換える
上記の方法は、単一のファイル内の文字列を置き換えます。時には、複数のファイルで同じ文字列を置き換える必要があるかもしれません。
その場合、以下のコマンドを使用して、複数のファイル内の指定された文字列のすべての出現を置き換えることができます。
Get-ChildItem 'C:\New\*.txt' | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
上記のコードでは、Get-ChildItem を使用して、'C:\New'ディレクトリ内の'.txt'ファイルのリストを収集します。アスタリスク*ワイルドカードは、.txt ファイル拡張子を持つすべてのファイルを指定します。
次に、各ファイルをループし、Get-Content でその内容を読み取り、-Replace 演算子を使用して、'weekly'を'monthly'に変更する置き換え操作を適用します。修正された内容は、Set-Content を用いて同じファイルに書き戻されます。
このプロセスは、ディレクトリ内のすべてのファイルで繰り返され、'weekly'を'monthly'に効率的に置き換えます。
指定されたディレクトリとそのサブディレクトリ内のファイルの文字列を置き換えるために、-Recurse パラメータも使用できます。
Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
このコードでは、Get-ChildItem を使用して、'C:\New'およびそのサブディレクトリ内の'.txt'ファイルのリストを集めます。-Recurse オプションにより、指定されたディレクトリだけでなく、そのサブディレクトリ内でもこれらのファイルを検索します。
次に、2つの ForEach ループを使用して、各ファイルの内容にアクセスします。内側のループ内で、-Replace 演算子を使用してテキスト内の'weekly'を'monthly'に置き換えます。
最後に、修正された内容を同じファイルに保存します。このプロセスは、'C:\New'とそのサブフォルダー内のすべてのファイルを通過し、数多くのファイルおよび入れ子になったディレクトリ全体で'weekly'を'monthly'に効果的に置き換えることを可能にします。
結論
この記事では、Get-Content と Set-Content cmdlet を使用して、単一のファイル内の文字列を置き換えるさまざまな方法を見てきました。基本的な方法と、より効率的な -Raw パラメータメソッドを提供しました。続いて、ファイル内のテキストを置き換えるために File クラスの力を利用し、より高度な技術を実証しました。
さらに、ディレクトリ内およびそのサブディレクトリ内での複数のファイルにわたってテキストを置き換えることで知識を広げました。これらの方法は、人々がファイル内のテキストを簡単に編集できるようにし、PowerShell がこのようなタスクにいかに役立つかを示しています。
