gpt4 book ai didi

powershell - 匹配两个不同文件中的字符串,并在下一行输出此+

转载 作者:行者123 更新时间:2023-12-02 23:51:59 27 4
gpt4 key购买 nike

从一个相当复杂的契约(Contract)中,我有两个.txt文件。这些文件如下所示:

文件1:

Hash: 5FD876CDF0FCFAF1E7F018F5A8519A7B

Path: /Users/foobar/Desktop/whatever.jpg

文件2:
Hash: 0EDEFB152D489163E603F8C55F5463A7

Path: c:\Migration\Templates\script.exe

这里的目标是比较File1和File2并找到匹配的哈希。找到匹配的哈希后,将它们(和以下路径)输出到另一个.txt文件中。

我对这个问题进行了过多的搜索,但是大多数解决方案都是为了发现差异或设计不同,我在Powershell中的专业知识还远远不足以能够正确地重写它们。
# pattern to match the Hashes from File2
$pattern = "^[a-f0-9]{32}$"

# read in File1 as an array to compare to
$set1 = Get-Content -Path 'C:\File1.txt'

# prepare to collect the results
$results = New-Object -TypeName System.Text.StringBuilder

# start scanning the text2 file for matches to text1 entries
Get-Content -Path 'C:\File2.txt'
if ($_ -match $pattern)
{
$hashes = $Matches['hash']
if ($hashes -in $set1)
{
[void]$results.AppendLine($_)
}
}
}

# output the results
$results.ToString() | Out-File -FilePath 'C:\output.txt' -Encoding ascii

上面的代码还不够匹配,我需要帮助来完成它!

感谢您阅读我的帖子!

最佳答案

  • 您的模式 anchor 定在行开头(^),并且不包含前缀Hash:
  • 同样,要获取路径,您还需要一个多行模式,该模式需要使用-raw参数读取文件,并在模式中包括(?sm)开关。
  • 也不清楚一个文件中是否有多个Hash:/ Path:组合,以及要从中提取对的文件数。

  • 我建议:
  • 使用函数提取信息,或者
  • (如果只有两个文件使用Compare-Object获取匹配对),或者
  • (如果有更多文件),则通过哈希(Hash)收集输出和Group-Object,并且如果每个Group计数超过1,则输出具有所有路径的Group。

  • 以下脚本从给定文件中提取哈希/路径对,并将其输出为[PSCustomObject]。

    ## Q:\Test\2019\07\20\SO_57124977.ps1

    function Extract-HashPath($filename){
    $Pattern = '(?sm)^Hash: (?<Hash>[0-9A-F]{32})(\r?\n)*Path: (?<Path>.*?)$'
    ((Get-Content $filename -raw) |
    Select-String -Pattern $Pattern -AllMatches).Matches.Groups | ForEach-Object{
    Set-Variable -Name $_.Name -Value $_.Value
    if ($_.Name -eq 'Path'){
    [PSCustomObject]@{
    Hash = $Hash
    Path = $Path
    }
    }
    }

    }

    $File1HashPath = Extract-HashPath '.\File1.txt'
    $File2HashPath = Extract-HashPath '.\File2.txt'
    $File1HashPath
    $File2HashPath

    来自上述文件的文本的示例输出(其中不包含可比较的哈希)

    > Q:\ Test \ 2019 \ 07 \ 20 \ SO_57124977.ps1

    哈希路径
    ---- ----
    5FD876CDF0FCFAF1E7F018F5A8519A7B /Users/foobar/Desktop/whatever.jpg
    0EDEFB152D489163E603F8C55F5463A7 c:\ Migration \ Templates \ script.exe

    关于powershell - 匹配两个不同文件中的字符串,并在下一行输出此+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124977/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com