Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Partial String Replacement using PowerShell

Problem

I am working on a script that has a user provide a specific IP address and I want to mask this IP in some fashion so that it isn't stored in the logs. My problem is, that I can easily do this when I know what the first three values of the IP typically are; however, I want to avoid storing/hard coding those values into the code to if at all possible. I also want to be able to replace the values even if the first three are unknown to me.

Examples:

10.11.12.50 would display as XX.XX.XX.50
10.12.11.23 would also display as XX.XX.XX.23

I have looked up partial string replacements, but none of the questions or problems that I found came close to doing this. I have tried doing things like:

# This ended up replacing all of the numbers
$tempString = $str -replace '[0-9]', 'X'

I know that I am partway there, but I aiming to only replace only the first 3 sets of digits so, basically every digit that is before a '.', but I haven't been able to achieve this.

Question

Is what I'm trying to do possible to achieve with PowerShell? Is there a best practice way of achieving this?

like image 373
Brandon Avatar asked Dec 03 '25 07:12

Brandon


1 Answers

Here's an example of how you can accomplish this:

Get-Content 'File.txt' |
  ForEach-Object { $_ = $_ -replace '\d{1,3}\.\d{1,3}\.\d{1,3}','xx.xx.xx' }

This example matches a digit 1-3 times, a literal period, and continues that pattern so it'll capture anything from 0-999.0-999.0-999 and replace with xx.xx.xx

like image 73
Maximilian Burszley Avatar answered Dec 06 '25 05:12

Maximilian Burszley



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!