将字符串放在同一行tcl上

时间:2015-06-12 23:23:33

标签: bash tcl

我有一个nmap输出,我需要将字符串放在同一行的不同行上。

Nmap输出:

 Nmap scan report for 169.254.0.1
 Host is up (0.014s latency).
 Not shown: 97 closed ports
 PORT     STATE SERVICE
 80/tcp   open  http
 1720/tcp open  H.323/Q.931
 5060/tcp open  sip
 Device type: VoIP adapter|WAP|PBX|webcam|printer

新输出:

169.254.0.1,Voip适配器

如何在tcl或bash上执行此操作?

2 个答案:

答案 0 :(得分:2)

Tcl中,我们可以使用regexp来提取所需的数据。

set nmap_output "Nmap scan report for 169.254.0.1
 Host is up (0.014s latency).
 Not shown: 97 closed ports
 PORT     STATE SERVICE
 80/tcp   open  http
 1720/tcp open  H.323/Q.931
 5060/tcp open  sip
 Device type: VoIP adapter|WAP|PBX|webcam|printer"

if {[regexp {scan\s+report\s+for\s+(\S+).*Device\s+type:\s+([^|]+)} $nmap_output match ip type]} {
    puts $ip,$type
}

答案 1 :(得分:0)

蛮力:

<your_nmap_output> |  \
egrep "Nmap scan report|Device type" | \
sed -r 's/[ ]*Nmap scan report for (.*)$/\1,/' | \
sed -r 's/[ ]*Device type: ([^\|]*)\|.*/\1/' |  \
xargs