Linux 如何避免在日志文件中打印特殊记录
我试图从日志文件中打印一些日志,避免打印特定的日志 我有一个日志文件,如下所示:Linux 如何避免在日志文件中打印特殊记录,linux,shell,scripting,Linux,Shell,Scripting,我试图从日志文件中打印一些日志,避免打印特定的日志 我有一个日志文件,如下所示: SOH +++ skdfhahjsahsdjk > ** ALPHA EDFJDJFKLJDKFJKSDLFJL SDFSDGDRGRTG WEFETTFYRT #168113++- SOH +++ skdfhahjsahsdjk > * KJENRFKES DFJKLSDFJEDFJDJFKLJDKFJKSDLFJL
SOH
+++ skdfhahjsahsdjk >
** ALPHA EDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
+++ skdfhahjsahsdjk >
* KJENRFKES DFJKLSDFJEDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
+++ skdfhahjsahsdjk >
CL mesukww juwaehdiearfa
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
+++ skdfhahjsahsdjk >
*C KJENRFKESDFJ ksludhieokdaewmdp
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
+++ skdfhahjsahsdjk >
** BETA EDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
** Gama EDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
我可以用下面的脚本打印特殊字符SOH和以**开头的日志:
awk '/^[ ]*SOH[ ]*$/ { # match SOH line
if(found && length(buf)>0) print buf; # print old buffer
buf=""; # clear buffer
found=0; # no ** line yet
skip=1; # do not add SOH line to buffer
}
/^[ ]*\*\*[ ]/ { found=1;} # ** line found. Edit: The second [ ] (with space and tab) makes sure there are exactly two *
{ # for any line...
if(!skip) buf=buf $0 "\n"; # add line to buffer (except SOH)
skip=0; # do not skip next line
}
END { # to handle matching last record
if(found && length(buf)>0) print buf; # print old buffer
}' logfile
我试图避免打印特定于e的记录,例如与“ALPHA”相关的日志
我尝试通过以下代码进行操作,但未成功:
cat logfile |grep -v "ALPHA"> result_log
结果:
SOH
+++ skdfhahjsahsdjk >
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
+++ skdfhahjsahsdjk >
** BETA EDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
** Gama EDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
正如您在上面看到的,它似乎打印了包含“ALPHA”m的日志的其余部分,而不考虑“ALPHA本身”
预期结果应该是:
SOH
+++ skdfhahjsahsdjk >
** BETA EDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
SOH
** Gama EDFJDJFKLJDKFJKSDLFJL
SDFSDGDRGRTG
WEFETTFYRT #168113++-
因此,它根本不应该打印包含“ALPHA”的日志
如果您能提出任何解决方案,我将不胜感激
谢谢大家! 您应该提供包含要打印的记录和要跳过的记录的示例输入。(带和不带
ALPHA
)在当前示例中,所有带**
的记录都包含ALPHA
。您还应该显示示例输入的预期输出。引用“特殊字符^A”的文本与示例输入和脚本不匹配。如果SOH
实际上是指相应的ASCII字符^A
(Strg+A),则应在文本中明确说明这一点。脚本使用文本SOH
,而不是控制字符。或者省略此项,并始终使用文本SOH
。嗨!谢谢你,博多。我只是按照你的建议编辑了这个问题。你应该提供包含要打印的记录和要跳过的记录的示例输入。(带和不带ALPHA
)在当前示例中,所有带**
的记录都包含ALPHA
。您还应该显示示例输入的预期输出。引用“特殊字符^A”的文本与示例输入和脚本不匹配。如果SOH
实际上是指相应的ASCII字符^A
(Strg+A),则应在文本中明确说明这一点。脚本使用文本SOH
,而不是控制字符。或者省略此项,并始终使用文本SOH
。嗨!谢谢你,博多。我只是按照你的建议编辑了这个问题。