从ip字符串中删除/32



我正试图从IP列表中删除/32该列表导出为14列。IP地址在列9&11

我试过使用sed:sed 's_/32__' filename但是这留下了大量的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

您正在使用的替换仅替换第一个出现的项。每一行中都有多个出现,所以你必须像前一行一样进行另一次替换,或者更简单地进行全局替换:

sed 's_/32__g' filename

在任何情况下,都要考虑到这些替换作用于整个文件,而不仅仅是第9列和第11列的内容。

您可以仅使用awk来完成此操作:

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

查看在线演示

详细信息

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

您可以尝试:

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

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

最新更新