从日志文件中提取源IP

时间:2019-06-23 14:21:24

标签: regex awk sed extract

我想从bash中的日志文件中提取“ srcip = x.x.x.x”。我的日志文件是这样的:

2019:06:23-17:50:03 myhost ulogd[5692]: id="2021" severity="info" sys="SecureNet" sub="packetfilter" name="Packet dropped (GEOIP)" action="drop" fwrule="60019" initf="eth0" srcmac="3c:1e:04:92:6f:fb" dstmac="00:50:56:97:7c:af" srcip="185.53.91.50" dstip="192.168.50.10" proto="6" length="44" tos="0x00" prec="0x00" ttl="235" srcport="54522" dstport="5038" tcpflags="SYN" 

我写了awk '{print $15}'来提取srcip,但是问题是srcip的位置在每一行中都不相同。我该如何提取srcip=x.x.x.x而没有其位置?

3 个答案:

答案 0 :(得分:1)

在每个UNIX盒的任何外壳中都包含sed:

$ sed -n 's/.*\(srcip="[^"]*"\).*/\1/p' file
srcip="185.53.91.50"

答案 1 :(得分:0)

以下命令提供您期望的结果

SELECT persons.name FROM persons JOIN houses ON (persons.id=houses.owner_id) WHERE houses.color<>'Blue';

选项grep -o -P 'srcip="(\d{1,3}[.]){3}\d{1,3}"' log仅打印匹配的部分。选项o是使用与perl兼容的正则表达式。正则表达式与P匹配,log是您要从中提取内容的文件的名称。

以下是regex101的链接,以获取对正则表达式的解释:https://regex101.com/r/hjuZlM/2

答案 2 :(得分:0)

awk版本

awk -F"srcip=" '{split($2,a," ");print FS a[1]}' file
srcip="185.53.91.50"

使用关键字分割行,然后在分割后得到下一个字段。