Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to ignore escape sequences stored in PowerShell string variable?

Tags:

In my PowerShell script, I'm running Select-String over a number of files, looking for a string passed into it via a variable ($id):

foreach ($file in (ls "path\to\files")) {     $found = $false     $found = Select-String -Path $file $id -Quiet     if ($found) {         break     } } 

Unfortunately, the $id variable sometimes things like "\C" or "\T", which Select-String tries to interpret as escape sequences. These are not valid escape sequences, so Select-String throws an error. They are not intended to be escape sequences (e.g., it could be part of a file path such as "C:\Test"), so how can I prevent PowerShell/Select-String from interpreting them as such? I've tried using parentheses around $id with no luck.

like image 462
alastairs Avatar asked Feb 09 '09 11:02

alastairs


1 Answers

Use the static escape() method, it instructs the regular expression engine to interpret these characters literally rather than as metacharacters:

$id = [regex]::escape($id) 

You can also turn the command to a one liner (-path can take a collection of files):

Select-String -Path path\to\files\\* -Pattern ([regex]::escape($id)) -Quiet 
like image 150
Shay Levy Avatar answered Sep 18 '22 21:09

Shay Levy