如何从Fortigate日志文件中匹配指定字符串后移除后续字符?
移除Fortigate日志中srcport字段的内容
针对Fortigate日志行(比如srcip=10.1.100.11 srcport=58012 srcintf="port12" ...),以下是两种实用的处理方法:
方法1:固定移除srcport后的指定内容(适用于端口长度固定的场景)
如果端口长度固定为5位,要移除srcport=后的端口值,用sed直接替换:
sed 's/srcport=.\{5\}//' log.txt
示例输入:
srcip=10.1.100.11 srcport=58012 srcintf="port12" dstip=192.168.1.1
执行命令后输出:
srcip=10.1.100.11 srcport= srcintf="port12" dstip=192.168.1.1
要是想把整个srcport=xxxxxx字段(包括srcport=)删掉,用:
sed 's/srcport=.\{5\} //' log.txt
输出会变成:
srcip=10.1.100.11 srcintf="port12" dstip=192.168.1.1
方法2:匹配到srcintf前的空格自动移除(适用于端口长度不固定的场景)
如果端口长度不固定,用sed匹配srcport=到下一个空格之间的所有内容并删除:
sed 's/srcport=[^ ]* //' log.txt
解释:[^ ]*表示匹配任意非空格字符,不管端口是3位、4位还是5位,都会把srcport=xxxx连同后面的空格一起删掉,直接衔接下一个字段。
示例输入同上,执行后输出:
srcip=10.1.100.11 srcintf="port12" dstip=192.168.1.1
方法3:用awk过滤字段
如果需要更灵活的字段处理,用awk遍历每个字段,跳过包含srcport=的字段:
awk '{for(i=1;i<=NF;i++) if($i !~ /srcport=/) printf "%s ",$i; print ""}' log.txt
解释:NF是当前行的字段总数,遍历每个字段,只要字段不包含srcport=就打印,最后换行补全格式。
内容的提问来源于stack exchange,提问作者user29447110
相关产品推荐
相关产品推荐

