Chadit
Chadit

Reputation: 965

Using PowerShell to replace string that contains $ in the string

I am trying to use PowerShell do a simple find and replace. I use template text files and use $ in front of values that need to be changed.

Example:

(Get-Content "D:\test") | Foreach-Object {$_ -replace "`$TBQUAL", "DBO"} | Set-Content "D:\test"

It should find the line OWNER=$TBQUAL and make it look like OWNER=DBO.

I am using the escape in front of $TBQUAL with no luck. To test that it is working if I removed the $ from the front, it would replace TBQUAL and made it look like OWNER=$DBO.

Upvotes: 4

Views: 10824

Answers (2)

Rob Whelan
Rob Whelan

Reputation: 1291

If you aren't using regular expressions in your replacement, you can do a simple (and fast) replace like this:

Foreach-Object {$_.Replace('$TBQUAL', 'DBO')}

Upvotes: 1

zdan
zdan

Reputation: 29450

Two things to get this to work:

  1. Use single quotes for your strings so that the $ is not interpreted as the start of a variable to be expanded.
  2. Escape the $ using a backslash "\" so the regular expression parser takes it literally.

For example,

PS C:\> 'Has a $sign in it' -replace 'a \$sign', 'no dollar sign'
Has no dollar sign in it

Upvotes: 6

Related Questions