Powershell 是否有方法向日期字符串添加2天,并用结果更新另一个字段?

Powershell 是否有方法向日期字符串添加2天,并用结果更新另一个字段?,powershell,Powershell,我有一个包含记录的大文件,其中每个记录中的日期字符串需要增加2天,这将更新其右侧的字段,其中包含带该日期的破折号“----”。例如,记录包含以下记录数据: 1440149049845_20191121000000 11/22/2019 **--------** 0.000 0.013 我想用2019年11月24日(在2019年11月22日的基础上增加2天)替换“-----------”破折号,以便显示如下: 1440149049845_20191121000000 11/22/2019 *

我有一个包含记录的大文件,其中每个记录中的日期字符串需要增加2天,这将更新其右侧的字段,其中包含带该日期的破折号“----”。例如,记录包含以下记录数据:

 1440149049845_20191121000000 11/22/2019 **--------** 0.000 0.013
我想用2019年11月24日(在2019年11月22日的基础上增加2天)替换“-----------”破折号,以便显示如下:

 1440149049845_20191121000000 11/22/2019 **11/24/2019** 0.000 0.013
此外,我需要将包含0.000的字段替换为0.412,以便整个更新的记录呈现如下:

 1440149049845_20191121000000 11/22/2019 **11/24/2019** **0.412** 0.013
$a = '1440149049845_20191121000000 11/22/2019 **--------** 0.000 0.013'
$null = $a -match '\d{2}/\d{2}/\d{4}' 
$a -replace '-{2,}',([datetime]$matches.0).adddays(2).tostring('MM/dd/yyyy') -replace '\b0\.000\b','0.412'

这可以在PowerShell中编码吗?

答案是肯定的。您可以执行以下类似操作:

 1440149049845_20191121000000 11/22/2019 **11/24/2019** **0.412** 0.013
$a = '1440149049845_20191121000000 11/22/2019 **--------** 0.000 0.013'
$null = $a -match '\d{2}/\d{2}/\d{4}' 
$a -replace '-{2,}',([datetime]$matches.0).adddays(2).tostring('MM/dd/yyyy') -replace '\b0\.000\b','0.412'
说明:

-match
使用正则表达式对字符串进行模式匹配。成功的匹配项存储在自动变量
$matches
$Matches
是每个捕获组的键值对的哈希表。每个捕获的值都可以通过名称的点引用来访问。由于我们没有指定捕获组名称,只使用默认组,
$Matches.0
检索匹配值

\d{2}/\d{2}/\d{4}
是一个正则表达式模式,与日期模式
MM/dd/yyyy
匹配。可以从
$Matches.0
检索匹配项

使用
[datetime]
加速器,将日期字符串转换为datetime对象,我们可以在其中访问
AddDays()
方法

\b0\.000\b
是另一个与
0.000
匹配的正则表达式模式,没有任何其他相邻字母或数字。注意
必须使用
\
转义才能是文字,因为
在正则表达式中有特殊含义


有时,将多个运算符串在一起比较容易。这是使用多个
-replace
运算符的目的。每个输出都被送入下一个操作员

这是我需要的东西。但是,在PS中测试代码时,我发现以下错误:表达式或语句中出现意外标记“.0”。这可能是PowerShell版本问题。我正在测试5.1。您可以将
$matches.0
替换为
$matches[0]
。确保
([datetime]$matches.0)周围没有引号。adddays(2)。tostring('MM/dd/yyyy')
。你是对的。我使用的是较旧版本的PowerShell,刚刚升级到5.1,消除了错误。现在我需要做的就是编写脚本代码,以获取包含此字符串的文件的内容,从而更新每个记录。您有允许我使用示例代码更新report.txt文件中所有记录的代码示例吗?