【发布时间】:2021-06-19 05:52:59
【问题描述】:
我正在读取一个日志文件,在该文件中我试图从包含子字符串“edited by:”并以“bye”结尾的行中获取一些值。
这就是日志文件的设计方式。
Error nothing reported
19-06-2021 LOGGER:INFO edited by : James Cooper Person Administrator bye. //Line 2
No data match.
19-06-2021 LOGGER:INFO edited by : Harry Rhodes Person External bye. //Line 4
.......
所以我正在尝试获取:
James Cooper Person Administrator //from line 2
Harry Rhodes Person External //from line 4
并将它们分配给我的 tcl 程序中的变量。
我假设提取的行位于列表名称 line2 中。 喜欢
set splitList[$line2 ' ']
set agent [lindex $splitList 0]
set firstName [lindex $splitList 1]
set lastName [lindex $splitList 2]
set role [lindex $splitList 3]
我了解将日志文件中提取或提取的行放在列表中并不是一个好主意,因为它们是非结构化输入。当 Tcl 列表函数不是正确的 Tcl 列表格式时,使用 Tcl 列表函数可能会导致奇怪的事情。
我对 tcl 很陌生。并且不知道在 tcl 中使用正则表达式。
所以我尝试使用正则表达式从匹配行中提取值。假设 line2 是一个变量,保存从日志文件中提取的匹配 line2,
regexp -- {edited by:(.*) bye.$} $line2 match agent
我能够得到如下所示的预期输出。
Person Harry Rhodes External
但是,在这个提取的字符串上,我不知道如何进一步钻取以使变量赋值。有关此方法或 tcl 库中存在的任何其他功能的任何建议可以帮助我完成此任务,请告诉我。
通过编辑日志格式更新了问题。日志文件格式不正确。
【问题讨论】: