2010-07-08 3 views
4

J'essaie d'utiliser PowerShell faire une recherche simple et remplacer. J'utilise des fichiers texte modèles et j'utilise $ devant les valeurs qui doivent être changées.

Exemple:

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

Il faut trouver la ligne OWNER=$TBQUAL et la faire ressembler à OWNER=DBO. J'utilise l'évasion devant $TBQUAL sans chance. Pour tester que cela fonctionne si j'ai enlevé le $ de l'avant, il remplacerait TBQUAL et le ferait ressembler à OWNER=$DBO.

Répondre

5

Deux choses à obtenir ce travail:

  1. Utilisez des guillemets simples pour vos chaînes afin que le $ ne soit pas interprété comme le début d'une variable à être étendue.
  2. Échapper le $ en utilisant une barre oblique inverse "\" pour que l'analyseur d'expression régulière le prenne littéralement.

Par exemple,

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

a fonctionné comme un charme , Je vous remercie. – Chadit

1

Si vous n'utilisez pas regular expressions dans votre remplacement, vous pouvez faire un simple (et rapide) remplacer comme ceci:

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