我正试图通过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完成此任务的任何想法?
答案 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"