PowerShell v5.1:使用正则表达式模式替换文件中的文本时出现问题

PowerShell v5.1: problem with replacing text in a file using regex patterns

我尝试遵循提供的答案 here and here

在“test1.txt”文件中我有这些内容:

20220421
20220422
20220423
20220424:
222

我想替换内容,使它们在输出文件“test2.txt”中看起来像这样:

20220421:
20220422:
20220423:
20220424:
222

我尝试使用以下代码实现此目的:

(Get-Content '.\test1.txt').replace('^\d{8}$', '^\d{8}:$') | Out-File '.\test2.txt'

然而,我在“test2.txt”中得到了以下内容,而不是预期的结果:

20220421
20220422
20220423
20220424:
222

有人可以解释为什么我没有达到预期的结果吗?

您没有使用支持 -replace 运算符的正则表达式,并且您在替换中使用的是正则表达式,而不是正确的替换模式。

您可以使用

(Get-Content '.\test1.txt') -replace '^(\d{8}):?\r?$', ':') | Out-File '.\test2.txt'

^(\d{8}):?\r?$ 正则表达式匹配八个数字,将它们捕获到组 1 中,然后是一个可选的冒号,一个可选的 CR,然后断言字符串位置的结尾。

替换为第 1 组值 () 加上冒号字符。

Powershell 将 $ 和 ^ 视为整个内容的开头和结尾,而不是单独的行。

这不是您想要的 - 我无法在替换字符串中换行。

@" 20220421 20220422 20220423 20220424: 222 "@ -replace "(\d{8})\n",'$1:'

换行符不起作用