【问题标题】:Using Powershell to find two different pattern matches in the same string and outputting the detected string使用Powershell在同一字符串中查找两个不同的模式匹配并输出检测到的字符串
【发布时间】:2019-06-17 20:56:39
【问题描述】:

我正在尝试找到一种方法来使用 powershell 在同一行中搜索两个不同的字符串匹配项,然后输出该字符串。

例如,我想查找文本文件中包含单词“dog”和“fence”的所有句子。

所以它会命中并检测/输出

句子 1:“狗跳过栅栏”

但不匹配:

句子 2:“狗去公园了”

句子 3:“他们把栅栏漆成白色”

Select-String 将为单个模式执行此操作,但我似乎无法让它在同一行中为两个模式匹配工作。

例如,这将检测两个模式,但所有三个句子,因为它单独查找模式:

Select-String -Path C:\Logs -Pattern 'Dog','Fence'

我知道使用 grep 和 awk 可以轻松完成此任务,但我希望找到一种在 PowerShell 中完成此任务的方法。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    没有 Regex AND 运算符,但基于我对 Regex 的有限知识和对 Stackoverflow 的快速搜索(因为之前必须问过这个问题)我遇到了this,这表明您可能想尝试这个:

    Select-String -Path C:\logs -Pattern "(?=.*dog)(?=.*fence)"
    

    【讨论】:

      【解决方案2】:

      -Pattern 接受正则表达式,所以这会起作用:

      Select-String -Path C:\Logs\* -Pattern 'dog.*fence'
      

      【讨论】:

      • OP 不是很清楚,如果条件 are 的顺序是 dog 然后 fence,如果可以反过来,您的正则表达式将不匹配。
      • 公平点。我试图证明您可以访问 RegEx 引擎,但没有考虑订单问题。
      【解决方案3】:

      我最终只是将它输送到另一个选择字符串中,所以我有 2 个选择字符串。第一个过滤为狗,第二个过滤为栅栏,这适用于任何排序。

      Select-String -Pattern "dog" | Select-String -Pattern "fence"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 2021-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多