从bash解析信息

时间:2014-07-27 14:55:29

标签: linux bash ubuntu

我正试图通过bash上的Ubuntu脚本解析某些信息

我每隔x秒执行一次bash脚本写入:

forever list

来自该命令的响应如下所示:

info:    Forever processes running
data:        uid  command         script                            forever pid   logfile                 uptime        
data:    [0] _1b2 /usr/bin/nodejs /home/ubuntu/node/server.js 28968   28970 /root/.forever/_1b2.log 0:0:17:17.233

我想解析日志文件/root/.forever/_1b2.log

的位置

有关如何使用bash完成此任务的任何想法?

4 个答案:

答案 0 :(得分:1)

解决此问题的众多awk变体中的两个:

# most basic
command | awk 'NR==3{ print $8 }' data


# a little bit more robust:
command | awk '$1=="data:" && $2=="[0]" { print $8 }' data
#                             ^^^^^^^^^
#             here I filter on the "[0]" text, but depending your needs
#             you might want to use $3=="_1b2" or $4=="/usr/bin/nodejs"

答案 1 :(得分:0)

您可以尝试以下GNU和基本sed命令,

$ command | sed -nr 's/^.* (\S+) [0-9]+:[0-9]+\S+$/\1/p' 
/root/.forever/_1b2.log
$ command | sed -n 's/^.* \(\S\+\) [0-9]\+:[0-9]\+\S\+$/\1/p' 
/root/.forever/_1b2.log

它仅打印非空格字符,后跟空格+一个或多个数字+ :符号+一个或多个数字。

答案 2 :(得分:0)

您可以grep您要查找的行,并将输出通道传输到awk

forever list | grep "\.log" | awk '{print $4}'

这将找到带有.log文件的所有进程,并打印日志文件的位置(第4列)。

答案 3 :(得分:0)

假设日志文件位于/root/.forever目录中,您可以使用grep此正则表达式:

forever list |  grep -o "/root/\.forever/.*\.log"