我正试图从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的出现,并打印输出。