Comment remplacer des dates dans un fichier texte avec Powershell en utilisant des expressions régulières
J'ai fait beaucoup de recherches sur ce sujet et n'ai pas travaillé sur la réponse, mais je sens que je suis proche!
J'ai des dates dans un fichier texte dans le format suivant: 18/06/2012 23:00:43 (dd/mm/yyyy HH:MM:SS)
qui je veux convertir: 2012-18-06 23:00:43 (yyyy-dd-mm HH:MM:SS)
à l'aide de Powershell.
Pour effectuer la conversion dans un éditeur de texte à l'aide d'expressions régulières, je ferais ceci:
Find: ([0-9]+)/+([0-9]+)/+([0-9]+)
Replace with: --
J'ai donc essayé d'utiliser cette même logique dans la suite du script Powershell:
(Get-Content C:\script\test.txt) |
Foreach-Object {$_ -replace "([0-9]+)/+([0-9]+)/+([0-9]+)", "(--)"} |
Set-Content C:\script\test.txt
mais que les résultats dans la suite de changement indésirable:
\3-\2-\1 23:00:43
Quelqu'un peut-il m'aider à obtenir cela?
Merci beaucoup d'avance!
source d'informationauteur AshBestos
Vous devez vous connecter pour publier un commentaire.
C'est ce que vous voulez:
Capture d'un groupe de références sont faites avec le
$
symbole, pas une barre oblique inverse. Aussi, pour faire référence à un groupe capturé par un numéro, une vous devez utiliser des guillemets simples autour de la chaîne de remplacement; sinon, PowerShell interpréter tout$
symbole comme une référence à une variable préalablement définie, qui dans ce cas sera le résultat dans la chaîne"--"
depuis ces variables n'existent pas.L'-remplacer l'opérateur prend en charge le même texte de remplacement d'espaces réservés que les Regex.Fonction de remplacement ().NET. E. g. $& est l'ensemble de la correspondance de la regex, $1 est le texte correspondant à la première capture d'un groupe, et ${nom} est le texte correspondant par le groupe nommé "nom".
Au lieu de
"(\3-\2-\1)"
utilisation'($3-$2-$1)'
'06/18/2012 23:00:43' -replace "(\d+)/(\d+)/(\d+)", '($3-$2-$1)'
essayer