仅显示 bash 脚本中日志文件的一部分

仅显示 bash 脚本中日志文件的一部分

OpenVPN 日志如下所示:

OpenVPN

CLIENT LIST
Updated,Sat Jun 20 04:20:07 2015
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
[ A .... ]
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
[ B.... ]
GLOBAL STATS
Max bcast/mcast queue length,33
END

在哪里A以上是按照特定方式格式化的主机列表。

我有一个 bash 脚本,我将使用它来对“路由表”部分中的项目执行操作()。如何在我的脚本中以有效的方式将此主机列表与文档的其余部分分开?

答案1

您可以使用sed删除从第 1 行到匹配的起始行的 (d) 行。然后删除从匹配的结束行到最后一行 ($) 的行。您可能还想删除“虚拟地址”标题行。剩下的就是您想要的!

sed '1,/^ROUTING TABLE/d
     /^Virtual Address,/d
     /^GLOBAL STATS/,$d'

答案2

下列sed命令

      sed -n '/ROUTING/,/\[ B/{p}' filename

按照你的意愿做:-n抑制打印每一行的默认行为,单引号之间的表达式选择一系列行,然后打印它们(这是 {p})。要选择的范围通过以分隔符分隔的匹配项(初始匹配项和最终匹配项)来标识,在我的例子中,我使用正斜杠/作为分隔符;初始和最终模式匹配项必须用逗号分隔,并且\[用于强调方括号的字面意思,IE这不是一个语法结构,而是一个必须找到的真正的开方括号。

相关内容