试图快速解析几个文件,但似乎无法组合我试图从日志文件中提取的内容。我正在尝试从日志文件中提取日期和 IP 地址并将它们写入新的日志文件。日志文件类似于:
some info[28/Dec/2016:04:05:58 -0700] 192.168.58.98 Some Other random information
--information--[28/Dec/2016:04:05:58 -0700] 192.168.56.10 Some Other random information
192.168.58.1 [28/Dec/2016:04:05:58 -0700]information 192.168.58.0 Some Other random
sometext:192.168.58.2 [28/Dec/2016:04:05:58 -0700] information
并非文件中的每一行都首先包含 IP 地址或日期...尽管日期肯定在括号中。
到目前为止我尝试过的代码是:
cat log_file | awk -vRS="]" -vFS="[" '{print $2]' >> New_Log_File
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" log_file >> New_Log_File
虽然我需要能够同时提取日期或 IP 并将它们写入新日志文件,但它可以很好地提取日期或 IP。如有任何帮助,我们将不胜感激。
最佳答案
这里是 grep -o
结合 awk
来解析你的输出:
grep -iEo '([0-9]+\.){3}[0-9]+|[0-9]{2}/[a-z]{3}/[0-9]{4}(:[0-9]{2}){3} -[0-9]+|$' file |
awk -F '\n' -v RS= '{
for (i=1; i<=NF; i++)
if ($i ~ /-[0-9]{4}/) dt=$i; else ips = (ips != "" ? ips OFS $i : $i);
print dt " :: " ips; dt=ips=""
}'
28/Dec/2016:04:05:58 -0700 :: 192.168.58.98
28/Dec/2016:04:05:58 -0700 :: 192.168.56.10
28/Dec/2016:04:05:58 -0700 :: 192.168.58.1 192.168.58.0
28/Dec/2016:04:05:58 -0700 :: 192.168.58.2
- 第一个
grep
用于获取所有日期时间戳或 ip 地址 - 然后
awk
用于遍历解析的输出并分离日期和 ip 地址。
关于linux - 括号和 ips 之间的所有内容都解析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471517/