【问题标题】:An efficient search for IP addresses using Regular Expressions使用正则表达式高效搜索 IP 地址
【发布时间】:2019-05-24 20:35:29
【问题描述】:

我想找到最有效的正则表达式,以便在一次搜索中找到三个 IP 地址,但我不确定是否可以使用更有效(更快)的语法。

我试过一次搜索一个地址,但我很好奇是否有更快的方法。

zgrep -a -i  192\.168\.1\.(10|23|34) *.* >> Results.txt

我没有收到任何错误。我真的只是想知道是否有更快的语法可以使用。

【问题讨论】:

  • 如何在正则表达式中包含空格?
  • 当您附加到文件并一次使用一个 ip 正则表达式时,可能会导致输出文件看起来不同。有问题吗?
  • 该命令不起作用。你应该去掉-i,因为caseless对于数字和点来说是没有意义的,希望你的zip文件中没有二进制文件,所以-a也不是必需的,但是你需要添加-E| 工作。它还将匹配 IP 地址,如 192.168.1.101 和其他包含与该正则表达式匹配的部分的字符串,因为没有边界。如果您需要帮助,请发布一些示例输入(即 zcat 的输出)和预期输出。如果不清楚,请参阅How to Ask

标签: regex grep zgrep


【解决方案1】:

删除忽略大小写-i 标志可能会使其更快。对于固定字符串匹配,例如您示例中的 3 个可能匹配,grep -Fgrep -f 也很有用。

如果您的文件非常大,您也可以使用sift

【讨论】:

    【解决方案2】:

    idk 大约更快(也许删除 -a 和 -i 会有所不同,idk)但这会更准确,因为它可以避免与包含目标 IP 地址作为子字符串的较长字符串的错误匹配:

    zgrep -E '(^|[^0-9])192\.168\.1\.(10|23|34)([^0-9]|$)' file
    

    如果这不是问题,那么这会更快:

    printf '192.168.1.10\n192.168.1.23\n192.168.1.34\n' | zgrep -F -f- file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2017-03-15
      • 2015-11-22
      相关资源
      最近更新 更多