【问题标题】:How can I extract strings from some text file with powershell script?如何使用 powershell 脚本从某些文本文件中提取字符串?
【发布时间】:2017-12-12 14:21:33
【问题描述】:

我想从一些文本文件中提取一些字符串。在对这些文件进行了一些研究之后,我发现了一些字符串出现在文本文件中的模式。

我在 google-search 的帮助下编写了一个简短的 powershell 脚本。该脚本接收两个参数(文本文件路径和提取关键字)并操作从文本文件中提取字符串。

在从文件$tpath\temp.txt 中查找和提取目标字符串时,此脚本将其保存到另一个文件$tpath\tmpVI.txt

Set-PSDebug -Trace 2 -step
$txtpath=$args[0]
$exkey=$args[1]
$tfile=gc "$tpath\temp.txt"
$savextracted="$tpath\tmpVI.txt"

$tfile -replace '&', '&' -replace '^.*$exkey', '' -replace '\s.*$', '' -replace '\\.*$','' | out-file "$savextracted" -encoding ascii

但是直到现在,提取和保存的结果一直是错误的,从来没有想要的字符串。

通过PS调试,最后一行的正则表达式似乎有问题,变量$exkey在替换引号中这样做。但我不知道如何解决这个问题。我该怎么办?

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    如果您要捕获匹配的行,这里有一个可以解决该问题的 sn-p:

    Function Get-Matches
    {
        Param(
            [Parameter(Mandatory,Position=0)]
            [String] $Path,
    
            [Parameter(Mandatory,Position=1)]
            [String] $Regex
        )
    
        @(Get-Content -Path $Path) -match $Regex
    }
    

    【讨论】:

    • 那些文本文件都是单行文本文件。事实上,我已经在windows CMD中通过FINDSTR命令从原始文本文件中提取了关键字匹配的一行,并将其保存到我的PS脚本的“temp.txt”文件中。然后只为了从那一行文件中提取与关键字相关的字符串,我编写了上面的 PS 脚本。该脚本在批处理文件中调用并实现提取并将提取的字符串保存到另一个文本文件以供以后使用。但它仍然没有正确提取..
    • @ThmLee 如果它们都在一行上,那么您是否只是在寻找文件中是否存在该单词?真假评价?
    • 嗯,但这些是相当大的行,一行有 30k+ 个字符。;;;
    • @ThmLee 如果是 ASCII,那仍然只有 ~240KB
    • 文本文件为 UTF-8,提取的字符串以 ASCII 格式保存到文件“$tpath\tmpVI.txt”中。保存字符串没有问题,但是提取不需要的字符串有问题,所以我认为正则表达式,引号中的变量或最后一行的转义方法肯定有问题。脚本中的提取过程如下。 step1) 替换所有“&”至 ”&”。 step2) 删除变量“$exkey”前面的所有字符。 step3)删除空格后的所有字符。 step4) 删除反斜杠“\”后的所有字符
    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多