【问题标题】:remove the /32 from ip string从 ip 字符串中删除 /32
【发布时间】:2020-03-15 20:43:21
【问题描述】:

我正在尝试从 IP 列表中删除 /32 该列表是导出的 14 列。 IP 地址在第 9 和 11 列中

我尝试使用 sed:sed 's_/32__' filename 但这留下了大量的 x.x.x.x/32 行。 喜欢;172.16.16.160/32;22;TCP

所以我正在考虑使用 awk 选择第 9 和 11 列并通过 sed 将其通过管道传输,但这最终会导致混乱和错误。

只剪掉 / 后面的所有内容是行不通的,因为列表中还有 url。

任何帮助将不胜感激。

下面已经运行 sed 的(匿名)数据样本:

timestamp (UTC);ID;Threat Level;Category;Exporter IP address;Observation domain ID (ODID);Source MAC;Manufacturer;Source IP;Source Port;Destination IP;Destination Port;Protocol;Description
2020-03-14 13:54:10;20810;5;Ingress Traffic;::ffff:ac8:c8d0/128;101;00:10:8c:f0:cx:c0;Intel;8.8.8.8/32;49420;10.0.0.1/32;22;TCP;Ingress connection to common SSH port:  100% CertaintyHigh Severity Category: SSH Description: Shh

【问题讨论】:

    标签: bash awk sed


    【解决方案1】:

    您使用的替换只替换第一次出现。您在每一行中出现多个,因此您必须像前一个那样进行另一次替换,或者更简单地进行全局替换:

    sed 's_/32__g' filename
    

    无论如何,请考虑到这些替换作用于整个文件,而不仅仅是第 9 列和第 11 列的内容。

    【讨论】:

      【解决方案2】:

      您只能使用awk 来完成此操作:

      awk 'BEGIN{FS=OFS=";"} {sub(/\/32/, "", $9);sub(/\/32/, "", $11);}1' file
      

      online demo

      详情

      • BEGIN{FS=OFS=";"} - 将输入和输出字段分隔符设置为 ;
      • sub(/\/32/,"", $9);sub(/\/32/,"", $11); - 从字段 9 和 11 中删除 /32 的第一个实例
      • 1 - 触发默认打印操作。

      【讨论】:

        【解决方案3】:

        你可以试试:

        gawk '{gsub("/32",""); print}' file
        

        gsub 删除整个输入记录 ($0) 上所有出现的 /32 并打印输出。

        【讨论】:

          猜你喜欢
          • 2011-10-04
          • 2015-07-15
          • 2016-07-26
          • 2013-09-18
          • 2011-11-22
          相关资源
          最近更新 更多