I want to replace some text in every script file in folder, and I’m trying to use this PS code:
$pattern = '(FROM [a-zA-Z0-9_.]{1,100})(?<replacement_place>[a-zA-Z0-9_.]{1,7})'
Get-ChildItem -Path 'D:\Scripts' -Recurse -Include *.sql | ForEach-Object { (Get-Content $_.fullname) -replace $pattern, 'replace text' | Set-Content $_.fullname }
But I have no idea how to keep first part of expression, and just replace the second one. Any idea how can I do this? Thanks.
Not sure that provided regex for tables names is correct, but anyway you could replace with captures using variables
$1,$2and so on, and following syntax:'Doe, John' -ireplace '(\w+), (\w+)', '$2 $1'Note that the replacement pattern either needs to be in single quotes (
'') or have the$signs of the replacement group specifiers escaped ("`$2 `$1").If you need to reference other variables in your replacement expression (as you may), you can use a double-quoted string and escape the capture dollars with a backtick