期待在 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
我尝试过的:
我尝试使用 grep
和 sed
以某种方式工作..
$ 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/