python - 打印匹配行和匹配行之前的一行

标签 python linux awk sed grep

期待在 Linux 主机上的文件中打印 Matching line 和之前的一行,从包含的匹配行到一行。

以下只是日志文件中的内容:

[2020/02/18 08:25:21.229198,  1] ../source3/lib/smbldap.c:1206(get_cached_ldap_connect)
  Connection to LDAP server failed for the 1 try!
[2020/02/18 08:25:21.229221,  2] ../source3/passdb/pdb_ldap_util.c:287(smbldap_search_domain_info)
  smbldap_search_domain_info: Problem during LDAPsearch: Timed out

我尝试过的:

我尝试使用 grepsed 以某种方式工作..

$ egrep -B 1 "failed|Timed" /var/log/samba/smbd.log.old |tr -d "\n" | sed "s/--/\n/g"


[2020/02/18 08:25:21.229198,  1] ../source3/lib/smbldap.c:1206(get_cached_ldap_connect)  Connection to LDAP server failed for the 1 try!
[2020/02/18 08:25:21.229221,  2] ../source3/passdb/pdb_ldap_util.c:287(smbldap_search_domain_info) smbldap_search_domain_info: Problem during LDAPsearch: Timed out

这看起来不是一个更清洁的解决方案,我期待一些专家单行,awk、sed、grep 甚至 python 都可以接受一个行。

最佳答案

可以单独使用awk来完成:

awk ' /Timed|failed/ { print previous, $0; }; {previous = $0;}' /var/log/samba/smbd.log.old

关于python - 打印匹配行和匹配行之前的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60319917/

相关文章:

node.js - 当我使用 PM2 + Docker 启动我的应用程序时,只需运行并退出

linux - 在所需列中查找重复项并在 awk 中打印所选模式?

python - django user_passes_test 装饰器

python - 如何在Python中生成网格并绘制3D曲面?

Linux命令获取env文件的位置

java - 强制 Java2D 子像素抗锯齿

python - 如何获取 NLTK 中同义词集的 wordnet 词义频率?

python - 如何将 (n,) 数组添加到 numpy 中的 (n,m) 数组?

string - awk中不区分大小写的字符串匹配

unix - 在awk中将时间戳转换为EPOCH