PowerShell:-replace, regex y($) dolores de signo de dólar
dollar-sign (2)
Estoy en el proceso de convertir miles de líneas de código de lote en PowerShell. Estoy usando regex para ayudar con este proceso. El problema es que parte del código es:
$`$2
Cuando se reemplaza, solo muestra $2
y no expande la variable. También he usado comillas simples para la segunda parte de reemplazar en lugar de escapar de las variables, el mismo resultado.
$origString = @''
IF /I "%OPERATINGSYSTEM:~0,6%"=="WIN864" SET CACHE_OS=WIN864
...many more lines of batch code
''@
$replacedString = $origString -replace "(IF /I `"%)(.+)(:.+%`"==`")(.+`")(.+)","if ( $`$2 -match `"^`$4 ) {`$5 }"
$replacedString
Podrías probar algo como esto:
$origString -replace "(IF /I `"%)(.+)(:.+%`"==`")(.+`")(.+)",''if ($$$2 -match "^$4" ) {$5 }''
Tenga en cuenta el $$$2
. Esto evalúa $
y el contenido de $2
.
Un poco de código para mostrarle las diferencias. Inténtalo tú mismo:
''abc'' -replace ''a(/w)'', ''$1''
''abc'' -replace ''a(/w)'', "$1" # "$1" is expanded before replace to ''''
''abc'' -replace ''a(/w)'', ''$$$1''
''abc'' -replace ''a(/w)'', "$$$1" #variable $$ and $1 is expanded before regex replace
#$$ and $1 don''t exist, so they are expanded to ''''
$$ = ''xyz''
$1 = ''123''
''abc'' -replace ''a(/w)'', "$$$1`$1" #"$$$1" is expanded to ''xyz123'', but `$1 is used in regex
intente así:
$replacedString = $origString -replace "(IF /I `"%)(.+)(:.+%`"==`")(.+`")(.+)","if ( $`$`$2 -match `"^`$4 ) {`$5 }"