2012-06-20 12 views
9

Ho fatto molte ricerche su questo e non ho risolto la risposta, ma mi sento come se fossi vicino!Come sostituire le date nel file di testo con PowerShell usando le espressioni regolari

Ho le date in un file di testo nel seguente formato: 18/06/2012 23:00:43 (dd/mm/yyyy HH:MM:SS) che voglio convertire in: 2012-18-06 23:00:43 (yyyy-dd-mm HH:MM:SS) usando Powershell.

Per eseguire la conversione in un editor di testo utilizzando le espressioni regolari farei questo:

Find: ([0-9]+)/+([0-9]+)/+([0-9]+) 

Replace with: \3-\2-\1 

Così ho provato ad utilizzare questa stessa logica in un il seguente script PowerShell:

(Get-Content C:\script\test.txt) | 
Foreach-Object {$_ -replace "([0-9]+)/+([0-9]+)/+([0-9]+)", "(\3-\2-\1)"} | 
Set-Content C:\script\test.txt 

ma che risulta nella seguente modifica indesiderata:

\ 3- \ 2- \ 1 23:00:43

012.

Qualcuno può aiutarmi a inchiodare questo?

Molte grazie in anticipo!

+0

Se si dispone di una stringa di data in una variabile ($ data), allora per riformattare facilmente in PowerShell: *** (Get-Date $ date) .ToString ('aaaa-gg-MM HH: mm: ss') *** – EBGreen

risposta

21

Questo è ciò che si vuole:

(Get-Content C:\script\test.txt) | 
Foreach-Object {$_ -replace "([0-9]+)/+([0-9]+)/+([0-9]+)", '$3-$2-$1'} | 
Set-Content C:\script\test.txt 

Cattura di raggruppare riferimenti sono fatte con il simbolo $, non una barra rovesciata. Inoltre, per fare riferimento a un gruppo catturato per numero, you must use single quotes around the replacement string; in caso contrario, PowerShell interpreterà qualsiasi simbolo $ come riferimento a una variabile definita in precedenza, che in questo caso genererà la stringa "--" poiché non esiste alcuna variabile di questo tipo.

+0

Grazie Michael, ma sfortunatamente sto ancora ottenendo il risultato: \ 3- \ 2- \ 1 23:00:43 con questo script. Mi sto perdendo qualcosa? – AshBestos

+0

@AshBestos: ti sei ricordato di salvare lo script dopo averlo copiato? Questa è la mia prima ipotesi. –

+0

Aha, stavo effettivamente controllando un file chiamato text.txt in una directory diversa! Oops! Grazie mille per il tuo aiuto. – AshBestos

2

provare

Foreach-Object {$_-replace "([0-9]+)/+([0-9]+)/+([0-9]+)", '$3-$2-$1'} 
+0

Grazie Christian :) – AshBestos

Problemi correlati