我想在给定路径的所有文件和子目录中搜索除127.0.0.1之外的所有IP地址。
我试过了:
function searchstr($string)
{
ls -Recurse | Select-String $string -List | Select Path
}
这允许我搜索特定的ip
searchstr "192.153.133.2"
但不是所有的ips ......
我通常在eclipse中使用正则表达式执行此操作,如下所示:1)
ctrl + h
=>
但是这个项目是如此之大,并且有很多对ips的引用,当我尝试在其上运行该正则表达式时,eclipse会死掉。
我希望我的输出看起来像:
C:\full\path\to\file.php
C:\full\path\to\ipFile.txt
并排除127.0.0.1
答案 0 :(得分:1)
试一试。可以修改正则表达式以在Select-String
命令中执行127.0.0.1排除,但我不确定。我只知道正则表达式。
Get-ChildItem -Recurse `
| Select-String -Pattern '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' `
| ? { $_.Line -ne '127.0.0.1' } `
| Select-Object -ExpandProperty Path -Unique
<强>更新强>
试一试。
Get-ChildItem -Recurse `
| Select-String -Pattern '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' -AllMatches `
| ? {
$matches = ($_.Matches | Select-Object -Unique)
return $matches.Count -gt 1 -or $matches[0].Value -ne '127.0.0.1'
} `
| Select-Object -ExpandProperty Path -Unique
这应该排除包含OP在评论中出现的行的文件:
ip address = 127.0.0.1
但它不会排除包含以下行的文件(建议的修补程序会排除带有此行的文件):
ip address = 127.0.0.1; ip address = 8.8.8.8
答案 1 :(得分:1)
试试这个;)
$dirroot="C:\temp\root"
$IPregex=[regex]‘(?<Address>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))’
gci -Recurse $dirroot -File | foreach {$res=(Get-Content $_.fullname); if ($res -Match $IPregex -and $Matches.Address -ne "127.0.0.1" ) {New-Object -TypeName psobject -Property @{IP=$IPregex.Match($res).Value; File=$_}} }