如何在图案和线条之间以另一种模式开头打印行



我需要您的帮助,以用尴尬解析日志文件,以便仅提取必要的信息。我简化了很多东西,可以更明显,而且看起来像这样:

2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS whatever:Jhon 1 + random_text
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS ANYTHING 2 + random_text
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text

详细说明:

总体想法是仅包含"名称:jhon"的过滤线(没有什么:

我在末尾对每行编号,以使3组可能的情况更加可见(日志文本以" whywhewhere:jhon"(未打印1行(结尾;带有通用的DateStamped行"任何东西"(2-线未打印(;或带有"名称:jhon"(3-线打印((

(

该功能是VMware vRealize编排器中工作流程的一部分(因此实际的语言是JS,但我可以使用SSH和尴尬(,但我不会深入研究。

我尝试了各种尴尬和正则表达方式,但无法弄清楚。我能得到的最接近的东西与此类似:

awk '/Jhon/{flag=1}/whatever/{flag=0}flag' file.txt

,但这是错误的,因为我认为"任何东西"是固定模式,而且在这种情况下,包含"任何东西"的行都没有被过滤。实际上,"任何东西"one_answers"任何东西"(以及随机_text和time hh:mm:ss(可以是文学的。因此,停止匹配的唯一方法是从日期格式开始在行上停止它(但我无法使用2019年,因为它在每条非Log_text行上使用(。


也尝试了一些JS正则义务,但太复杂了。

最终输出应该看起来像这样:

2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text

我会尝试这样的事情:

 awk '$1 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{if($0~/name:Jhon/){flag=1}else{flag=0}}flag' file.txt

说明:

  • a〜/datter/将检查变量a是否匹配pattern
  • 在您的代码中,您使用了/Jhon/{flag=1}。此表达只是$0 ~ /Jhon/{flag=1}的快捷方式。如果行($ 0(匹配模式/John/
  • ,将执行块{flag=1}
  • $1 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/表示如果行的第一列匹配日期格式 YYYY-mm-dd(< 4 digits> - < 2数字> - < 2 digits>(

    >( >
    awk '
        # If first column matches a date format
        $1 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{
            # If the line contains name:Jhon
            if($0~/name:Jhon/)
            {
                flag=1
            }
            else
            {
                flag=0
            }
        }
        # Prints if flag != 0
        flag
    ' file.txt
    

,但是当然,如果log_text从日期开始的某个地方开始,它将失败。

如果log_text始终在2行上,您可以尝试以下操作:

awk '{counter-=1}/name:Jhon/{counter=3}counter>0' file.txt

返回

2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text

最新更新