在文本文件中转换纪元时间
Convert epoch times in text file
我正在尝试为文本文件中的几个时间戳转换纪元时间,我有下面的代码。我知道替换行是错误的,但我不知道如何使用 foreach-object 来完成此任务。
Function Convert-FromUnixdate ($UnixDate) {
,[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').`
AddmilliSeconds($UnixDate))
}
$convert = Get-Content -Path C:\test\test.txt
$convert -Replace "[0-9]{13}", 'Convert-FromUnixdate($_)'
Get-Content returns 一个字符串数组,一个字符串对应文件中的每一行。
所以你可以
foreach ($line in (Get-Content -Path C:\test\test.txt))
{
$line -Replace "[0-9]{13}", 'Convert-FromUnixdate($line)'
}
或者更简约的变体如
Get-Content -Path C:\test\test.txt | % {$_ -Replace "[0-9]{13}", 'Convert-FromUnixdate($_)'}
正如您自己所说,-replace 行仍然不起作用。
对于 "normal" 正则表达式替换,您拥有的代码可以使用。 -replace
运算符可用于字符串数组(即 Get-Content
returns)。
但是,由于您想在替换中使用函数,因此您不能使用该运算符,无论您是将它应用于数组还是循环应用于每个数组元素。相反,您需要将正则表达式定义为 [regex]
对象,并使用其 Replace()
方法对数组元素调用回调 function/scriptblock。
function Convert-FromUnixDate($UnixDate) {
[timezone]::CurrentTimeZone.ToLocalTime(([DateTime]'1/1/1970').AddMilliseconds($UnixDate))
}
$re = [regex]'\d{13}'
$callback = { Convert-FromUnixDate($args[0].Value) }
Get-Content -Path 'C:\test\test.txt' | ForEach-Object {
$re.Replace($_, $callback)
}
我正在尝试为文本文件中的几个时间戳转换纪元时间,我有下面的代码。我知道替换行是错误的,但我不知道如何使用 foreach-object 来完成此任务。
Function Convert-FromUnixdate ($UnixDate) {
,[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').`
AddmilliSeconds($UnixDate))
}
$convert = Get-Content -Path C:\test\test.txt
$convert -Replace "[0-9]{13}", 'Convert-FromUnixdate($_)'
Get-Content returns 一个字符串数组,一个字符串对应文件中的每一行。
所以你可以
foreach ($line in (Get-Content -Path C:\test\test.txt))
{
$line -Replace "[0-9]{13}", 'Convert-FromUnixdate($line)'
}
或者更简约的变体如
Get-Content -Path C:\test\test.txt | % {$_ -Replace "[0-9]{13}", 'Convert-FromUnixdate($_)'}
正如您自己所说,-replace 行仍然不起作用。
对于 "normal" 正则表达式替换,您拥有的代码可以使用。 -replace
运算符可用于字符串数组(即 Get-Content
returns)。
但是,由于您想在替换中使用函数,因此您不能使用该运算符,无论您是将它应用于数组还是循环应用于每个数组元素。相反,您需要将正则表达式定义为 [regex]
对象,并使用其 Replace()
方法对数组元素调用回调 function/scriptblock。
function Convert-FromUnixDate($UnixDate) {
[timezone]::CurrentTimeZone.ToLocalTime(([DateTime]'1/1/1970').AddMilliseconds($UnixDate))
}
$re = [regex]'\d{13}'
$callback = { Convert-FromUnixDate($args[0].Value) }
Get-Content -Path 'C:\test\test.txt' | ForEach-Object {
$re.Replace($_, $callback)
}