linux - 如何在日志文件中查找变量的下一个实例?

标签 linux bash parsing grep

所以我试图解析 FTP 日志并查看某个用户是否安全登录。到目前为止,在用户登录后,我可以拉出接下来的几行

cat proftpd.log.2 | grep -B 3 "USER $sillyvariable"

这是它创建的示例输出

::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "AUTH TLS" 234 -
::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "USER $sillyvariable" 331 -

现在这是我想要的完美示例,它显示AUTH TLS 消息和IP 匹配。然而,情况并非总是如此,因为许多用户不断地登录和注销,而且大多数时候输出都是困惑的。

有没有办法可以 grep 查找 USER $sillyvariable 并找到他/她在前一行中包含“AUTH TLS”的匹配 IP,这样我就可以知道他们安全登录了?我想你可以说我想 grep 用户,然后向后 grep 以查看他们源自的连接(匹配的 IP)是否安全。我有点坚持这一点,真的需要一些帮助。 谢谢!

最佳答案

$ grep -B3 'USER $sillyvariable' proftpd.log.2 |
  tac | awk 'NR==1 {IP=$1} $1==IP {print}' | tac
::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "AUTH TLS" 234 -
::ffff:127.0.0.0 UNKNOWN ftp [04/Jan/2013:11:03:06 -0800] "USER $sillyvariable" 331 -

这使用 tac 来反转 grep 结果中的行。然后它会查找 IP 地址与 USER 行中的匹配的所有行。最后,它再次运行 tac 以将行恢复为原始顺序。

关于linux - 如何在日志文件中查找变量的下一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506862/

相关文章:

linux - 使撤消表空间数据文件脱机,处于恢复模式?

linux - 使用 sudo 保留内联变量

python - 使用python提交表单

c++ - 读取空格会使解析器崩溃。为什么?

linux - 如何使用 SED 或 AWK 删除第一行以外的奇数行

linux - 在 Linux 中查找共享库的加载地址

linux - 从一个文件中读取行范围并在另一个文件中找到该范围内的最大值

bash - 如何使用 Bash 将一个目录合并到另一个目录?

bash - 您将如何对多行进行分组?

java - Java代码的智能搜索和生成,最好用Python?