Bash 将字符串放在同一行tcl上
我有一个nmap输出,我需要把字符串放在同一行的不同行上 Nmap输出: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 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
}
伟大的工作起来很有魅力!谢谢