Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将字符串放在同一行tcl上_Bash_Tcl - Fatal编程技术网

Bash 将字符串放在同一行tcl上

Bash 将字符串放在同一行tcl上,bash,tcl,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|W

我有一个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上执行此操作?

暴力:

<your_nmap_output> |  \
egrep "Nmap scan report|Device type" | \
sed -r 's/[ ]*Nmap scan report for (.*)$/\1,/' | \
sed -r 's/[ ]*Device type: ([^\|]*)\|.*/\1/' |  \
xargs
|\
egrep“Nmap扫描报告|设备类型”|\
sed-r的/[]*Nmap扫描报告(.*)$/\1,/'|\
sed-r的/[]*设备类型:([^\\\\\]*)\\\\\.*/\1/''\
参数代换

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
}

伟大的工作起来很有魅力!谢谢