Я пытаюсь получить версии для сервисов в файле 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)/

2 ответа2

2

Вы можете сделать то же самое, используя grep с опцией -o (--only-Match):

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

Вот один из способов,

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

и, чтобы избежать совпадения, скажем « 8080 » здесь,

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

Но, я думаю, есть лучшая форма вывода NMAP, которая сделает вашу жизнь проще.
И вы найдете более точные способы для этого grepable вывода в документации Nmap .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .