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:'
换行符不起作用
我尝试遵循提供的答案 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:'
换行符不起作用