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

Regex 在Linux shell中,如何使用正则表达式过滤其他命令的输出。,regex,linux,bash,shell,ubuntu,Regex,Linux,Bash,Shell,Ubuntu,在Linux shell中,如何使用正则表达式过滤其他命令的输出。 与cisco设备一样,我们使用SHVER | b接口,该接口仅显示有关int的信息。 我的要求是从“Dogstatsd(v 5.12.0)”和状态日期和时间过滤以下命令的输出以显示 因此,我可以使用此o/p和特定条件来编写脚本以自动重新启动代理 root@adcd:~#服务数据狗代理信息-v 收集器(V5.12.0) 状态日期:2017-05-30 08:20:13(17秒前) Pid:7864 平台:Linux-3.11.0-

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

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

root@adcd:~#服务数据狗代理信息-v 收集器(V5.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.1364位 日志:,/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

主机名 =========

套接字主机名:adcd 主机名:adcd 套接字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_发射器[确定]
====================

Dogstatsd(V5.12.0) 状态日期:2017-05-30 08:20:24(7秒前) Pid:7859 平台:Linux-3.11.0-24-generic-x86_64-with-Ubuntu-13.10-saucy Python版本:2.7.1364位 日志:,/var/log/datadog/dogstatsd.log,syslog:/dev/log

刷新计数:583466 包数:333155 每秒数据包数:0.0 公制计数:1 事件计数:0 服务支票计数:1

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

货运代理(V5.12.0) 状态日期:2017-05-30 08:20:29(2秒前) Pid:8868 平台:Linux-3.11.0-24-generic-x86_64-with-Ubuntu-13.10-saucy Python版本:2.7.1364位 日志:,/var/log/datadog/forwarder.log,syslog:/dev/log

队列大小:422字节 队列长度:1 刷新计数:1102592 收到的交易:879956 交易记录:879955 拒绝的事务:0 API密钥状态:API密钥有效

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

微量元素(V5.12.0) 未运行(端口8126)


root@adcd:~

我不熟悉这个程序,但我以前不得不解决这样的问题。我假设你总是以一行“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
我们得到定义文件长度的值,到达您想要的第一行之前的长度,输出结束的长度,并相应地修剪