powershell - 有没有办法将 2 天添加到日期字符串并使用结果更新另一个字段?
问题描述
我有一个包含记录的大文件,其中每条记录中的日期字符串需要增加 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
这可以在 PowerShell 中编码吗?
解决方案
答案是肯定的。您可以执行类似于以下的操作:
$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]
加速器,日期字符串被转换为日期时间对象,我们可以在其中访问该AddDays()
方法。
\b0\.000\b
是另一种不匹配0.000
任何其他相邻字母或数字的正则表达式模式。请注意.
必须如何转义\
才能成为文字,因为.
在正则表达式中具有特殊含义。
有时将多个运算符串在一起更容易。这就是拥有多个-replace
运营商的目的。每个输出都被馈送到下一个运算符。
推荐阅读
- html - 使用导航链接和版权信息实施 Bootstrap 4 Sticky Footer
- django - 用于通知的 Django redis
- javascript - extjs 现代 NS_ERROR_NOT_AVAILABLE 对话框显示()
- java - 防止 Tomcat 覆盖控制器建议返回的错误响应
- angular - Angular handleError:如何获取自定义 API 错误消息?
- c# - 我需要知道什么?在这个 if 语句中是什么意思?ASP.NET 核心 2
- java - 第二个活动中的输出不起作用
- javascript - 循环ajax连接超时如何修复
- javascript - 如何在关闭时从弹出窗口中获取参数
- regex - 正则表达式以匹配字母数字后跟下划线和后面的字母数字