我试图从这个命令的输出中解析出最近的负载 -
[sandeepan@ip-10-169-92-150 ~]$ w
14:22:21 up 17 days, 51 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
sandeepa pts/0 115.112.95.170 06:38 43:57 0.51s 0.51s -bash
sandeepa pts/1 115.112.95.170 13:17 4.00s 0.03s 0.00s w
负载平均值后的第一个: -
|
\|/
load average: 0.00, 0.01, 0.05
我正在使用它,这有效 -
w | awk '{print $10}' | tr -d ,
然而,我意识到我正在寻找的价值可能并不总是第10个变量。因此,我试图在这里使用正则表达式,但不幸的是,无法使用它与我知道的几个bash命令/实用程序中的任何一个。
我有这个正则表达式,我可以使用它来匹配所需的值 -
/.*load average:\s([0-9]+\.[0-9]+),.*/m
我试着查看了sed手册,查看了其他一些问题,比如Using sed to remove unwanted characters from output,但是对我的工作起了不了解。
答案 0 :(得分:1)
当您知道之前和之后的文本时,最好使用这样做的后视:检查给定位置的文本,无论该行的其余部分是什么。
鉴于您的示例文件,我将其存储在一个文件中并执行此操作:
$ grep -Po '(?<=load average: )[^,]*' file
0.00
这是说:嘿,在load average:
之后获取所有文本,直到找到逗号。
所以,如果您有这样的文件:
$ cat file
14:22:21 up 17 days, 51 min, 2 users, load average: 0.00, 0.01, 0.05
hello how are you, load average: 1.23, 0.01, 0.05
它将返回如下:
$ grep -Po '(?<=load average: )[^,]*' file
0.00
1.23
请注意,man w
可以为您提供有关如何通过某些选项获取此信息的良好提示,以及man top
。