2

我只需要使用 sed 过滤来自 /usr/share/nmap/nmap-services 的端口

tcpmux  1/tcp   0.001995        # TCP Port Service Multiplexer [rfc-1078]
compressnet     2/tcp   0.000013        # Management Utility
compressnet     3/tcp   0.001242        # Compression Process
unknown 4/tcp   0.000477
unknown 6/tcp   0.000502
echo    7/tcp   0.004855
unknown 8/tcp   0.000013
discard 9/tcp   0.003764        # sink null
unknown 10/tcp  0.000063
systat  11/tcp  0.000075        # Active Users

我尝试过类似 (!?([0-9]+/tcp)) 但它不起作用:为什么?

谢谢

4

3 回答 3

2

尝试这样做:

grep -oP '\d+(?=/(udp|tcp))' /usr/share/nmap/nmap-services

或使用 perl :

perl -lne 'print $& if m!\d+(?=/(udp|tcp))!' /usr/share/nmap/nmap-services

我使用积极的前瞻性高级正则表达式,请参阅http://www.perlmonks.org/?node_id=518444

或使用没有高级正则表达式的 awk :

awk '{gsub("/.*", ""); print $2}' /usr/share/nmap/nmap-services

或者

awk -F'[ /\t]' '{print $2}' /usr/share/nmap/nmap-services
于 2012-11-15T03:11:14.387 回答
0

最简单的就是这样:

cut -s -d\  -f2 test

你也可以这样做:

sed '/[^ ]* \([^ ]*\).*/ s::\1:; /^$/d' FILE

cut变体打印不匹配的空行。

于 2012-11-15T07:14:24.720 回答
0

这是一个使用 AWK 的示例

cat /usr/share/nmap/nmap-services | awk '{print $2}' | awk -F\/ '{print $1}'
于 2012-11-15T03:57:21.827 回答