微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析日志文件,匹配字符串数组

如何解决解析日志文件,匹配字符串数组

我有一个非常大的 DNS 调试日志,其中每一行都包含一个 IP 和一个记录类型(SOA、A、PTR),以空格分隔。 一个例子:

SND    2.2.2.2    SOA
SND  2.2.2.2  A
RCV   11.11.11.11    A
RCV  4.4.4.4       SOA
RCV    7.7.7.7   SOA

我想过滤掉包含单词 SOA 或 $IgnoreIPs 字符串数组中的任何值的任何行。我该怎么做?

   $LogFilePath = (Get-content "c:\DNS Debug.log" )
    $IgnoreIps= "1.1.1.1","2.2.2.2","3.3.3.3","4.4.4.4"

       foreach ($Line in $LogFilePath){
          if (($Line -match "Rcv") -and ($line -notmatch "SOA") -and ($line -notmatch $IgnoreIps)){
               write-host "do stuff"
           }
       }

解决方法

您可以更轻松地将每一行解析为单独有意义的组件:

foreach($line in $LogFilePath){

  # Split into three parts,trim any trailing whitespace
  $direction,$address,$rtype = $Line -split '\s+',3 |% Trim

  if($address -in $IgnoreIps){
    # ignored IP,skip this line
    continue
  }

  if($rtype -eq 'SOA'){
    # SOA record,skip this line
    continue
  }

  if($direction -eq 'Rcv'){
    # Neither address nor resource type is ignored,let's do the work!
    Write-Host "do stuff"
  }
}
,

更新 - 不是最优雅的,但我最终这样做了: 不是最优雅的方法,但这有效(notin 运算符):

foreach ($Line in $LogFilePath){
    if ( ($Line -match "Rcv") -and !(($Line -match 'SOA') -or ($Line -match 'TKEY')) ){
        $IPAddress = ($Line| Select-String -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.Value
            If($IPAddress -notin $IgnoreIps){  
                write-host "do stuff"

            }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?