如何使用grep -Po正则选项非贪婪跨多行匹配提取nmap有效扫描结果
实现命令
直接执行如下命令即可提取所有nmap扫描返回有效信息(端口open+后续脚本输出)的条目:
grep -Poz '(?s)Nmap scan report for \d+\.\d+\.\d+\.\d+.*?111/tcp open.*?(?=\nNmap scan report|\Z)' test2
正则参数说明
-P启用Perl兼容正则语法-o只输出匹配到的内容-z将输入内容视为以NULL字符分隔的单条记录,相当于把整个文件加载为单个字符串,支持跨行匹配(?s)开启DOTALL模式,此时.可以匹配换行符,你之前遇到的匹配异常问题是没有使用非贪婪修饰符,和该模式无关Nmap scan report for \d+\.\d+\.\d+\.\d+匹配单台主机扫描结果的起始行.*?111/tcp open非贪婪匹配到端口开放的行,自动过滤掉closed、filtered的无效主机条目.*?(?=\nNmap scan report|\Z)继续非贪婪匹配当前主机的所有后续扫描内容,直到遇到下一台主机的扫描起始行或者文件末尾,避免贪婪匹配吃掉整个文件内容
输出效果
执行命令后只会返回10.11.1.72的完整有效扫描结果,和你期望的输出完全一致。
内容的提问来源于stack exchange,提问作者spookymonkey
相关产品推荐
相关产品推荐

