【问题标题】:How to get files which have multiple required strings如何获取具有多个必需字符串的文件
【发布时间】:2014-03-19 21:03:47
【问题描述】:

我正在尝试查找已给出字符串的文件。我正在使用以下行

 Get-ChildItem -recurse | Select-String -pattern "Magnet","Stew" | group path | select name

但它给出的文件包含“磁铁”、“炖”中的任何一个字样。但我想要同时包含这两个词的文件。从逻辑上讲,上述命令将其解释为“或”条件。我想要“和”条件。谁能指导我如何做到这一点?

【问题讨论】:

标签: powershell


【解决方案1】:

为你的正则表达式试试这个:

'.*(?:stew.*magnet)|(?:magnet.*stew).*'

编辑:

如果您要在文件中的任何位置查找这些匹配项:

Get-ChildItem -Recurse |
 where {(
          ($_ | Select-String -Pattern 'Stew' -SimpleMatch -Quiet) -and
          ($_ | Select-String -Pattern 'Magnet' -SimpleMatch -Quiet)
         )}

发布在 CB 提供的链接上的解决方案将起作用,但对于您需要做的事情似乎不是很有效。 -SimpleMatch 将比使用正则表达式模式更快,-Quiet 开关将使其仅返回 True 或 False,具体取决于它是否在文件中找到匹配项。如果其中一个或另一个术语出现在文件中的可能性要小得多,请更改顺序,使一个出现在测试堆栈中的第一个,这样测试就会更快地失败,并且可以进入下一个文件。

【讨论】:

  • 我认为如果这两个词在不同的行中可能会出现问题。
  • 你是对的。如果它位于文件中的任何位置,那么如果您想在一次读取操作中执行它,那么 select-string 将不适合该解决方案。
  • 也许使用[system.io.file]::ReadAllText()可以做到,它总是返回一个字符串类型。
  • 或 Get-Content -Raw,并将正则表达式更改为多行。但是您可能会遇到大文件的内存问题。
猜你喜欢
  • 2020-01-25
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多