powershell回到上一个换行符

问题描述

我正在寻找一个脚本,使我可以更正几个月以来错误生成的日志文件的格式,从而得到以下格式

$response = $this->client->execute(new OrdersCaptureRequest($payment_id));

我希望更正以下格式

xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX
 / EQUIPEMENT / Arrivée:20xx-xx-xx
xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX
 / ACCI / Arrivée:20xx-xx-xx
xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX
 / CMS / Arrivée:20xx-xx-xx

我正在尝试使用已经创建的清晰的日志脚本,但是我无法做到这一点,对我在网上发现的内容毫无帮助。

xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX / EQUIPEMENT / Arrivée:20xx-xx-xx
xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX / ACCI / Arrivée:20xx-xx-xx
xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX / CMS / Arrivée:20xx-xx-xx

解决方法

假设您的日志文件始终采用您指定的格式,则您一次只能读取源文件2行并将它们连接在一起:

PS C:\Users\Brice> F:\Desktop\jsonconvert.ps1
ConvertFrom-Json : Invalid JSON primitive: .
At F:\Desktop\jsonconvert.ps1:1 char:63
+ ... nt 'F:\Desktop\1.txt' | Out-String | ConvertFrom-Json | Conve ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json],ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

用法:

function Repair-LogFile
{
    param( $Logfile )
    
    $lineCount = 2;

    # read 2 lines of log file into a buffer,# then join them together and output the result
    Get-Content -Path $Logfile -Encoding UTF8 | foreach-object `
        -Begin {
            $buffer = @();
        } `
        -Process {
            $buffer += $_;
            if( $buffer.Length -eq $lineCount )
            {
                Write-Output ($buffer -join "");
                $buffer = @();
            }
        } `
        -End {
            if( $buffer.Length -gt 0 )
            {
                Write-Output ($buffer -join "");
            }
        }

}
,

另一种方法是将switch与参数RegexFile一起使用:

$result = switch -Regex -File 'D:\Test\some.log' {
    '^\s\/'  { $line + $_ ; $line = '' }
    default  { $line = $_ }
} 

# output on screen
$result

#output to new log file
$result | Set-Content -Path 'D:\Test\new.log'

输出:

xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX / EQUIPEMENT / Arrivée:20xx-xx-xx
xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX / ACCI / Arrivée:20xx-xx-xx
xx-xxx-20xx xx:xx:xx INFO : xxxx-x : Demande d'envoi du mail Sujet: XXX - XXXXX / CMS / Arrivée:20xx-xx-xx