是否有一种简单的方法来打印IP_Address:port#?因为我很快到达SED命令,端口:#被剥离
Apr 6 14:20:41 TCP 178.255.83.1:80 in
Apr 6 14:20:41 TCP 178.255.83.1:80 in United Kingdom
egrep -w 'TCP|UDP' $Denied_IPs |
sed 's/:[^:]* in/ in/; s/:[^:]* out/ out/' |
awk '{cmd="echo "$5" | code | fgrep 'Country:' | cut -c 16-43";
cmd | getline rslt;
close(cmd);
print $1" "$2" "$3" "$4" "$5" "$6" "rslt}' >> "$IP2COUNTRY"
答案 0 :(得分:1)
sed
命令显式剥离端口。鉴于这是sed
命令正在执行的操作,只需将其从表达式中删除即可。
顺便说一下,这是一个相当不理想的实现。特别是在我们移除sed
后,egrep
可以折叠到awk
:
awk '/ (TCP|UDP) / {
split($5, addr, /:/);
cmd = "echo " addr[1] " | code | fgrep Country: | cut -c 16-43";
cmd | getline rslt;
close(cmd);
print $1, $2, $3, $4, $5, $6, rslt
}' < "$Denied_IPs" >> "$IP2COUNTRY"
我不禁想到code
中awk
的调用可以稍微优化一下。
(我还删除了'Country:'
周围的单引号,它们没有任何用处 - 如果他们已经需要,他们实际上已经破坏了脚本,因为整个事情是已用单引号括起来。)