sed imprimir apenas correspondência de padrão

0

Estou tentando obter versões para serviços em um arquivo gnmap. Uma linha típica se parece com:

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

Eu preciso corresponder portas específicas "abertas" e imprimir apenas a expressão correspondente. Eu tentei:

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

Eu preciso que o resultado seja:

80/open/tcp//http//HP-ChaiSOE 1.0 (HP LaserJet http config)/
    
por blanker 15.06.2011 / 15:58

2 respostas

2

Você pode fazer o mesmo usando o grep com a opção -o (--only-matching):

cat teste | grep -o "80\/open\/tcp\/[^,]*"
    
por 16.06.2011 / 17:58
0

Aqui está uma maneira,

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

e, para evitar correspondência, diga ' 8080 ' aqui,

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

Mas, eu acho, existe uma melhor forma de saída do NMAP que facilitará sua vida.
E você encontrará maneiras mais exatas para essa saída grepable na documentação do nmap.

    
por 15.06.2011 / 16:14

Tags