gpt4 book ai didi

powershell - 过滤数据部分,包括起始行和结束行-PowerShell

转载 作者:行者123 更新时间:2023-12-02 23:41:44 25 4
gpt4 key购买 nike

我有一个文本文件,如下所示:

Data I'm NOT looking for  
More data that doesn't matter
Even more data that I don't

&Start/Finally the data I'm looking for
&Data/More data that I need
&Stop/I need this too

&Start/Second batch of data I need
&Data/I need this too
&Stop/Okay now I'm done
Ending that I don't need

这是输出所需的内容:

File1.txt

&Start/Finally the data I'm looking for  
&Data/More data that I need
&Stop/I need this too

File2.txt

&Start/Second batch of data I need  
&Data/I need this too
&Stop/Okay now I'm done

我需要对文件夹中的每个文件执行此操作(有时会有多个文件需要过滤。)文件名可以递增:例如。 File1.txt,File2.txt,File3.txt。

这是我没有运气尝试过的:

ForEach-Object{
$text -join "`n" -split '(?ms)(?=^&START)' -match '^&START' |
Out-File B:\PowerShell\$filename}

谢谢!

最佳答案

看起来您已经很接近了:您的代码正确地提取了感兴趣的段落,但是缺少了对非&-起始行的段落内过滤,因此您需要写入特定于段落的输出文件:

$text -join "`n" -split '(?m)(?=^&Start)' -match '^&Start' | 
ForEach-Object { $ndx=0 } { $_ -split '\n' -match '^&' | Out-File "File$((++$ndx)).txt" }

这会为每个感兴趣的段落创建以 File1.txt开头的顺序编号文件。

要对文件夹中的每个文件执行此操作,并在所有输入文件上使用固定的命名方案 File<n>输出文件名(并使用累积编号):
Get-ChildItem -File . | ForEach-Object -Begin { $ndx=0 } -Process {
(Get-Content -Raw $_) -split '(?m)(?=^&Start)' -match '^&Start' |
ForEach-Object { $_ -split '\n' -match '^&' | Out-File "File$((++$ndx)).txt" }
}

要对文件夹中的每个文件执行此操作,并使用基于输入文件名的输出文件名和每个输入文件的编号(PSv4 +,由于使用了 -PipelineVariable):
Get-ChildItem -File . -PipelineVariable File | ForEach-Object {
(Get-Content -Raw $_) -split '(?m)(?=^&Start)' -match '^&Start' |
ForEach-Object {$ndx=0} { $_ -split '\n' -match '^&' | Out-File "$($File.Name)$((++$ndx)).txt" }
}

关于powershell - 过滤数据部分,包括起始行和结束行-PowerShell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40239309/

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