对于我眼前的即时任务,我试图从nmap ping扫描中提取特定输出,但这个问题可能更符合一般的满足感,因为我似乎并没有"得到它& #34;
简单地打印与这些精确图案匹配的线条非常容易,但我想做的不仅仅是这些。
例如
nmap -sP 1.2.3.4 | awk '/seems down/ || /is up/{print}'
会给我
Note: Host seems down If it is really up, but blocking our ping probes, try -Pn
或
Host is up (0.025s latency)
基本上我只想提取"主机似乎已关闭"或者#34;主持人已经开始了#34;一部分。更具体地说,我想剔除"主机[中间的任何内容]向下或向上",因为有时不同版本的nmap会给出不同的输出(但总是有单词Host,down或up) 。就像有一种方法可以匹配并显示以Host开头的任何模式,以向下或向上结束,然后停在那里。我认为这可以通过sed one-liner完成,但到目前为止,我只能删除" Host" " down"或者" up" ...这意味着我只是向后退一步。虽然我缺乏正则表达式,sed和awk经验是最让我失望的原因。
非常感谢任何指导。
答案 0 :(得分:0)
使用sed可能更容易:
sed -nr '/seems down|is up/s/^.*(Host [a-z]+ (down|up)).*$/\1/p' file
Host seems down
Host is up
答案 1 :(得分:0)
使用grep:
的版本grep -oP '(Host.*down|Host.*up)'
或显示首次出现“向下”或“向上”的版本。 Host
和(down|up)
之间的非贪婪匹配。
grep -oP 'Host.*?(down|up)'
打印
Host seems down
Host is up
甚至更精确,
grep -oP 'Host.*?\b(down|up)\b'
是什么使单词“向下”和“向上”单词边界,所以对于输入
Note: Host seems upper down If it is really up, but blocking our ping probes, try -Pn
打印
Host seems upper down
答案 2 :(得分:0)
为什么不使用grep:
nmap 1.2.3.4 | grep -oP '[hH]ost (up|seems down)'