首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sed命令前打印IP_ADDRESS:port #

如何在sed命令前打印IP_ADDRESS:port #
EN

Stack Overflow用户
提问于 2012-04-07 02:46:14
回答 1查看 178关注 0票数 0

有没有一种简单的方法打印IP_Address:port#?因为一旦进入SED命令,端口:#就会被剥离

输入文件示例

代码语言:javascript
复制
Apr 6 14:20:41 TCP 178.255.83.1:80 in

如下所示的首选输出

代码语言:javascript
复制
Apr 6 14:20:41 TCP 178.255.83.1:80 in United Kingdom
代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-07 02:55:50

sed命令正在显式剥离端口。鉴于这就是sed命令所做的全部工作,只需将其从表达式中删除。

顺便说一句,这是一个相当不理想的实现。特别是在我们移除sed之后,可以将egrep折叠到awk

代码语言:javascript
复制
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"

我不禁想到,awk中的code调用可以进行一些优化。

(我还删除了'Country:'两边的单引号,如果需要它们,它们对- and没有任何作用,它们实际上会破坏脚本,因为整个过程已经用单引号括起来了。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10047811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档