Regex 如何在powershell中替换多个文件中的文本和结束行?

Regex 如何在powershell中替换多个文件中的文本和结束行?,regex,powershell,Regex,Powershell,我有多个这样的文件 TEST:200333 75252 TEST:198234 201756 TEST:201616 274 TEST:200118 934521 TEST:123456 1234 200333;75252 198234;201756 201616;274 200118;934521 123456;1234 我想要这样的输出 TEST:200333 75252 TEST:198234 201756 TEST:201616 274 TEST:200118 934521 TEST

我有多个这样的文件

TEST:200333
75252
TEST:198234
201756
TEST:201616
274
TEST:200118
934521
TEST:123456
1234
200333;75252
198234;201756
201616;274
200118;934521
123456;1234
我想要这样的输出

TEST:200333
75252
TEST:198234
201756
TEST:201616
274
TEST:200118
934521
TEST:123456
1234
200333;75252
198234;201756
201616;274
200118;934521
123456;1234
我尝试了此代码,但不起作用:
powershell-Command”(gc myFile.txt)-替换“TEST:(\.+)\r\n(\.+)\r',“\1;\2”\124; Out File-encoding ASCII mynewFile.txt”

您可以使用

powershell -Command "(gc myFile.txt -Raw) -replace '(?m)^TEST:(\d+)\r?\n(\d+)\r?$', '$1;$2' | Out-File -encoding ASCII mynewFile.txt"
或者

看。请注意使用了
-Raw
选项,该选项将整个文件压缩成单个字符串

正则表达式匹配

  • (?m)
    -多行模式打开
  • ^
    -行开始
  • 测试:
    -一些固定文本
  • (\d+)
    -第1组:一个或多个数字
  • \r?\n
    -CRLF(回车+换行)/LF(换行)换行结束
  • (\d+)
    -第2组:一个或多个数字
  • \r?
    -可选CR(回车)
  • $
    -行尾

一种无正则表达式的方法,只需每隔一行连接一行:

powershell -Command "gc myFile.txt | % {$i=0}{if($i++%2){"$prev;$_"}else{$prev=$_.Substring(5)}} | sc mynewFile.txt -enc ASCII"
少代码高尔菲版本:

Get-Content myFile.txt | ForEach-Object -Begin {$i = 0} {
    if ($i++ % 2 -ne 0) {         # odd line
        "$prev;$_"                #   output "value from previous line;current line"
    } else {                      # even line
        $prev = $_.Substring(5)   #   remember value, cut off the "TEST:"
    }
} | Set-Content mynewFile.txt -Encoding ASCII

我获得了这个errorTermine“TEST:200333”非riconosciuto come nome di cmdlet、funzione、programma eseguibile o文件脚本。包括科雷托、昆迪·里普罗瓦雷在内的新一代管理人员。在里加:1车:12+测试:200333@Flavio请使用我刚刚更新的完整命令。它在我这边起作用。我得到一个-RAW参数的错误。如果我删除它,它不会给我一个错误,但它仍然不工作,输出文件与输入文件相同。如果我不使用正则表达式,只使用固定文本,它就可以工作。有什么建议吗?powershell-Command“(gc myFile.txt-Raw)-替换“(?m)^TEST:(\d+)\r?\n(\d+\r?$”,“$1;$2”| Out File-encoding ASCII mynewFile.txt”获取内容:不可能的trovare un参数更正名称“Raw”。在riga:1 car:33+(gc-VacciniSUM_20210510.txt-Raw@Flavio)中,如果您使用的是一些旧的PS版本,请使用
[system.io.file]尝试第二个命令::ReadAllText
。您正在运行哪个版本的PowerShell?您提到,
-Raw
参数在发布的解决方案中引发了一个错误?
-Raw
是在PowerShell版本3中引入的。这很有效!thanks@Flavio听到这个很好!注意:停下来想想没有正则表达式的方法是否也有效是值得的。