在Linux shell中,如何使用正则表达式来过滤其他命令的输出。 像在cisco设备中我们使用sh ver | b接口,只显示有关int的信息。 我的要求是从“Dogstatsd(v 5.12.0)”和状态日期&时间。
因此,我可以使用具有特定条件的此o / p来编写脚本以自动重启代理。
状态日期:2017-05-30 08:20:13(17之前) Pid:7864 平台:Linux-3.11.0-24-generic-x86_64-with-Ubuntu-13.10-saucy Python版本:2.7.13,64位 日志:,/ var / log / datadog / collector.log,syslog:/ dev / log
时钟 ==
NTP偏移:0.018秒 系统UTC时间:2017-05-30 06:20:31.535928
路径 =====
conf.d:/etc/dd-agent/conf.d checks.d:/opt/datadog-agent/agent/checks.d
主机名 =========
socket-hostname:adcd 主机名:adcd socket-fqdn:adcd
检查 ==
apache(5.0) --------------- - 实例#0 [确定] - 收集了12个指标,0个事件& 1次服务检查
网络(5.0) ---------------- - 实例#0 [确定] - 收集了16个指标,0个事件& 0服务检查
目录(5.0) ------------------ - 实例#0 [确定] - 收集了17个指标,0个事件& 0服务检查
ntp(5.0) ------------ - 收集0个指标,0个事件& 0服务检查
磁盘(5.0) ------------- - 实例#0 [确定] - 收集了24个指标,0个事件& 0服务检查
发射器 ======
====================
状态日期:2017-05-30 08:20:24(7s ago) Pid:7859 平台:Linux-3.11.0-24-generic-x86_64-with-Ubuntu-13.10-saucy Python版本:2.7.13,64位 日志:,/ var / log / datadog / dogstatsd.log,syslog:/ dev / log
同花顺数:583466 包数:333155 每秒数据包数:0.0 指标数:1 事件数:0 服务检查次数:1
====================
状态日期:2017-05-30 08:20:29(2s ago) Pid:8868 平台:Linux-3.11.0-24-generic-x86_64-with-Ubuntu-13.10-saucy Python版本:2.7.13,64位 日志:,/ var / log / datadog / forwarder.log,syslog:/ dev / log
队列大小:422字节 队列长度:1 同花顺数:1102592 收到的交易:879956 交易刷新:879955 交易被拒绝:0 API密钥状态:API密钥有效
======================
未运行(端口8126)
根@ ADCD:〜#
答案 0 :(得分:0)
我对这个程序并不熟悉,但我之前必须解决这个问题。我假设你总是要用'Dogstatsd'这一行开始你想要的输出,并且总是以几个等号结束。基于此,您可以编写输出脚本,如下所示:
#!/bin/bash
service datadog-agent info -v > /tmp/DogstatsDump.txt
LinesTotal=$(cat /tmp/DogstatsDump.txt | wc -l)
StartOfOutput=$(grep /tmp/DogstatsDump.txt -ne '^Dogstatsd (v' | cut -d':' -f 1)
LengthOfOutput=$(tail -n $(echo "$LinesTotal - $StartOfOutput + 1" | bc)/tmp/DogstatsDump.txt | grep -ne '^==========' | head -n 1 | cut -d':' -f 1 )
tail -n $(echo "$LinesTotal - $StartOfOutput + 1" | bc) /tmp/DogstatsDump.txt | head -n $(echo "$LengthOfOutput + 1" | bc)
rm /tmp/DogstatsDump.txt
我们得到定义文件长度的值,直到我们达到你想要的第一行的长度,输出结束的长度,以及相应的修剪。