You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vim中使用惰性量词提取Nmap扫描报告中的域名?

在Vim中提取Nmap扫描报告里的域名的多种实现方法

嘿,我整理了几种在Vim里提取目标域名的实用方案,完美适配你的需求:

方法1:全局命令+替换,直接提取到文件末尾

如果你想把所有域名提取并归集到当前文件末尾,可以执行这条命令:

:g/^Nmap scan report for /s/^Nmap scan report for \(\S\+\) .*/\1/ | normal! ddGp

解释:

  • :g/^Nmap scan report for /:匹配所有以指定内容开头的行
  • s/^Nmap scan report for \(\S\+\) .*/\1/:把行内容替换成第一个捕获组(\S\+匹配非空白字符,正好对应域名)
  • normal! ddGp:执行普通模式操作,删除当前行(dd)、跳到文件末尾(G)、粘贴该行(p)

方法2:用Vim专属零宽定位符简化提取

Vim里的\zs和\ze是替代lookaround的常用工具,能精准标记匹配内容的起止位置:

2.1 复制所有域名到寄存器

执行以下命令,把所有域名批量复制到寄存器a:

:let @a = '' | g/^Nmap scan report for /normal! /report for \zs\S\+<CR>yiW

解释:

  • /report for \zs\S\+<CR>:搜索到域名的起始位置(*\zs*标记匹配开始的地方)
  • yiW:复制光标下的整个非空白单词(正好是域名)
    之后你可以用"ap把寄存器里的域名粘贴到任意位置。

2.2 开启very magic模式贴近Perl正则语法

开启\v标记的very magic模式后,正则写法更接近你熟悉的Perl风格,无需额外转义:

:g/\v(report for )@<=(\S+) /s//\1/

解释:

  • \v:启用very magic模式
  • (report for )@<=:对应你熟悉的(?<=report for )正向回顾断言
  • (\S+):捕获域名内容

方法3:批量提取并导出到新文件

如果想直接把域名保存到独立文件,执行:

:%s/^Nmap scan report for \(\S\+\) .*/\1/g | w! domains.txt

解释:

  • :%s/.../.../g:对所有行执行替换,只保留域名
  • w! domains.txt:把处理后的内容保存到新文件domains.txt,原文件不会被修改

方法4:可视模式下提取部分行的域名

如果你只想提取选中行的域名:

  1. 进入可视行模式(按V),选中目标行
  2. 执行替换命令:
:'<,'>s/^Nmap scan report for \(\S\+\) .*/\1/

这样只会修改选中的行,精准提取目标域名。


内容的提问来源于stack exchange,提问作者KarlsD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:12:41