我试图从这个命令的输出中解析出最近的负载 -
[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之后的第一个:-
|
\|/
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 ,但不太了解如何使我的工作正常进行。
最佳答案
当您知道前后出现的文本时,最好使用执行此操作的后视:检查给定位置的文本,无论该行的其余部分是什么。
鉴于您的示例文件,我将其存储在一个文件中并执行了以下操作:
$ 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
的良好提示。
关于regex - 无法使用正则表达式解析 bash 输出并收集其中的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40045950/