在Linux shell中,如何使用正则表达式来过滤其他命令的输出。

时间:2017-05-30 09:16:23

标签: regex linux bash shell ubuntu

在Linux shell中,如何使用正则表达式来过滤其他命令的输出。 像在cisco设备中我们使用sh ver | b接口,只显示有关int的信息。 我的要求是从“Dogstatsd(v 5.12.0)”和状态日期&时间。

因此,我可以使用具有特定条件的此o / p来编写脚本以自动重启代理。

root @ adcd:〜#service datadog-agent info -v

收集器(v 5.12.0)

状态日期: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服务检查

发射器   ======

  • http_emitter [确定]

====================

Dogstatsd(v 5.12.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

====================

货代(v 5.12.0)

状态日期: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密钥有效

======================

跟踪代理(v 5.12.0)

未运行(端口8126)

根@ ADCD:〜#

1 个答案:

答案 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

我们得到定义文件长度的值,直到我们达到你想要的第一行的长度,输出结束的长度,以及相应的修剪。