我有一个不断填充的日志文件;我们假设它的名称是 logfile.txt。在此日志文件中,我想使用任何 bash 命令从包含同一行中其他字符串的单行中连续捕获子字符串。
这是日志文件中一行的示例:
2023-08-31 09:56:39,925 [G_M80T72|utx:0:ffffac17000b:45253299:64ec7753:79cb0e|chnl:LN1_CRYPTO_IN_MQ_REQ_AMP|id:196010175121000000000002134] WARN transaction.GeneralTransactionFailureException - GeneralTransactionFailureException Gateway.Transaction[196010175121000000000000067v1], StatusReason[ProcessingFailed/PayloadIntegrityCheckFailed]
Run Code Online (Sandbox Code Playgroud)
我想在每次该行包含 时捕获 string1LN1
和 string2 。CRYPTO_IN_MQ_REQ_AMP
PayloadIntegrityCheckFailed
String1 前面始终带有chnl:
',而 string2 后面始终带有管道。这2个字符串总是用下划线分隔(但string2也可以包含下划线)在我的例子中string1=LN1但它可能像{任何字母字符}LN{任何数字} String2可以由字母和数字组成
捕获 string1 和 string2 后,我将在另一个命令中将它们用作参数,例如:
{another_command} string1 string2
当然,只有新的条目应该被捕获,我不想连续扫描完整的日志,只扫描新的行,所以我想首先是文件tail -f
,然后使用一些 sed 魔法和正则表达式。
您知道如何继续吗?