How To RegEx Replace Multiple Strings In Text Files With Powershell

What’s the only thing better than replacing multiple strings in text files using powershell? Why, doing it with regular expressions, of course! Here’s how.

Following from a previous post on doing a mass file replace with a lookup, the slightly changed snippet below will let you do it using the power of regular expressions to transform the values you replace along the way.

Param (
    [String]$List = "TransformList.csv",
    [String]$Files = ".Files*.txt"
)
$ReplacementList = Import-Csv $List;
Get-ChildItem $Files |
ForEach-Object {
    $Content = Get-Content -Path $_.FullName;
    foreach ($ReplacementItem in $ReplacementList)
    {
        $Content = $Content -IReplace $ReplacementItem.OldValue, $ReplacementItem.NewValue;
    }
    Set-Content -Path $_.FullName -Value $Content
}

Save this snippet as FindTransform-InFilesUsingLookup.ps1 in a folder of your choice.
You can run this script by either moving your files to the default locations, as noted by the $List and $Files parameters in the code, or, you can run this script as below:

\.FindTransform-InFilesUsingLookup.ps1 .TransformList.csv .Files*.txt

Let’s give this a go. First of all, create a couple of files in the Files folder (for lazyness sake) in the same folder as the script:

StuffToReplace1.txt:

The quick brown fox jumps over the lazy dog over and over again

StuffToReplace2.txt:

The funky dancing duck jumps over the lazy cat over and over again

Now create a list of transformations you wish to do. To keep it simple, I’ll only create one here. Our transformation will identify the subject and object in each text (fox and dog in the first one, duck and cat in the second one), and then switch them around.

Let’s take the text below and save it as TransformList.csv in the same folder as the script:

OldValue,NewValue<br>(?&lt;TheSubject&gt;w+) jumps over the lazy (?&lt;TheObject&gt;w+),${TheObject} jumps over the lazy ${TheSubject}

Now execute the command below to see the results:

\.FindTransform-InFilesUsingLookup.ps1 .TransformList.csv .Files*.txt

And this is what we get in the affected files:

StuffToReplace1.txt:

The quick brown dog jumps over the lazy fox over and over again

StuffToReplace2.txt:

The funky dancing cat jumps over the lazy duck over and over again

Now this is what we call an inversion of roles – powered by PowerShell.


Index: PowerShell HowTo’s


Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s