我想从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
而没有其位置?
答案 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"
使用关键字分割行,然后在分割后得到下一个字段。