【问题标题】:Filter out a certain IP adreess过滤掉某个IP地址
【发布时间】:2016-09-15 00:07:21
【问题描述】:

寻找正确的正则表达式来过滤出各种 IP 地址:

假设我有一个这样的日志文件:

Sep 14 12:37:03 100.100.100.145:64439 -> 180.180.150.2:25 (TCP) SMTP
Sep 14 15:36:01 100.100.100.145:64439 -> 180.180.180.2:25 (TCP) SMTP
Sep 14 12:37:03 100.100.100.145:64439 -> 180.180.180.2:25 (TCP) SMTP
Sep 14 15:36:01 100.100.100.145:64439 -> 180.180.180.2:25 (TCP) SMTP
Sep 14 12:37:03 100.100.100.145:64439 -> 180.180.180.2:25 (TCP) SMTP
Sep 14 15:36:01 100.100.100.145:64439 -> 180.180.180.2:25 (TCP) SMTP

我可以搜索:

\b180\.180\.180\.2\:25\b.*SMTP

但我想找到所有不是我正确的 SMTP 服务器的东西,所以我寻找“否定词边界”。

对此有何建议?

【问题讨论】:

  • 你在使用grep吗?如果您想查找所有不匹配的内容,请使用grep -v <pattern>
  • 我没有使用 grep,不适用。
  • 你的编程语言是什么?

标签: regex


【解决方案1】:

当然,如果支持 lookarounds:

(?!.*\b(?:180\.180\.1[58]0\.2)\b)^.+$

见a demo on regex101.com。

【讨论】:

    【解决方案2】:
    awk '$6 ~ /^180\.180\.1[58]0\./ && $6 !~ /\.180\.2:25$/ && $8 == "SMTP"'
    

    将打印匹配第一个正则表达式而不是第二个正则表达式的行。

    您的问题并未表明这是否正是您想要的,但希望它可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 2016-12-04
      • 2022-12-02
      • 2013-09-07
      • 2018-09-30
      相关资源
      最近更新 更多