【发布时间】:2023-03-19 19:25:02
【问题描述】:
我们有一个大的 (~100MB) 文本文件。 我们需要删除任何包含某些短语的行。我想用 PowerShell 来代替目前的做法,它使用 windows grep 并且是一个 .bat 文件。
问题是,大约有 95 个关键短语。任何包含这些短语的行都必须删除。
关键短语列表包含在"badPhrases.txt" 中,像常规文本文件一样以行分隔。大概有 100 个,我不想将它们包含在硬编码列表中,但如果必须的话我会。
我尝试了几个/几个比较,但我的输出总是比我的原始输入文件大!或者,0k(空)。我究竟做错了什么?我怀疑问题出在Where-Object 过滤器中,但我可能是错的。
[string[]]$arrayFromFile = Get-Content -Path '.\badPhrases.txt'
get-content ".\inputfile.txt" | Where-Object {$_ -notlike $arrayFromFile} | Out-File ".\clean_data.txt" -Force
我尝试过 -notlike、-notin -notmatch 和 -notcontains(同时以看似合乎逻辑的方式翻转数组和输入对象)。比如……
Where-Object {$arrayFromFile -notin $_}
....
Where-Object {$_ -notcontains $arrayFromFile}
....
Where-Object {$_ -notlike arrayFromFile}
我搜索了 stackOverflow 并四处搜索,但我找不到任何未死的链接,这些链接解决了这个确切的用例。有一个“嘿脚本专家”的引用,但是...链接已失效。
【问题讨论】:
标签: arrays regex powershell data-processing