sed 仅打印模式匹配

sed 仅打印模式匹配

我正在尝试获取 gnmap 文件中服务的版本。典型的一行如下所示:

Host: 192.x.x.x ()    Ports: 21/open/tcp//ftp//HP JetDirect ftpd/, 23/open/tcp//telnet//HP JetDirect printer telnetd (No password)/, 80/open/tcp//http//HP-ChaiSOE 1.0 (HP LaserJet http config)/, 443/open/tcp//ssl|http//HP-ChaiSOE 1.0 (HP LaserJet http config)/, 515/open/tcp//printer///, 631/open/tcp//http//HP-ChaiSOE 1.0 (HP LaserJet http config)/, 7627/open/tcp//http//HP-ChaiSOE 1.0 (HP LaserJet http config)/, 9100/open/tcp/////, 14000/open/tcp//tcpwrapped///    Seq Index: 25   IP ID Seq: Incremental

我需要匹配特定的“开放”端口并仅打印匹配的表达式。我尝试过:

cat file | sed -n "/ 80\/open\/tcp\/\*\/\*\/\*\/\*\//p"

我需要的结果是:

80/open/tcp//http//HP-ChaiSOE 1.0 (HP LaserJet http config)/

答案1

您可以使用带有 -o(--only-matching)选项的 grep 执行相同操作:

cat teste | grep -o "80\/open\/tcp\/[^,]*"

答案2

这是一种方法,

sed 's|.*,80\([^,]*\).*|80\1|' 

并且,为了避免8080在这里匹配 say ' ',

sed 's|.*,80\/\([^,]*\).*|80/\1|' 

但是,我认为 NMAP 有更好的输出格式,可以让您的生活更轻松。
而且,您将找到更精确的方法来实现这一点。grepable 输出在 nmap 文档中。

相关内容