regex - 无法使用正则表达式解析 bash 输出并收集其中的一部分

标签 regex linux bash sed

我试图从这个命令的输出中解析出最近的负载 -

[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/

相关文章:

python - 如何使用正则表达式仅保留前n个重复单词

用于匹配不包含单词的行的正则表达式

linux - 如何开始修复存储库

bash - 如何让 `make` 提示用户输入密码并将其存储在 Makefile 变量中?

node.js - NPM 脚本包含括号语法错误

ruby-on-rails - 如何在单个字段上应用多个正则表达式

用于匹配数字和带量词的一个点的正则表达式

linux - 实现 Nagios Topography 以避免过度警报

java - 如何防止运行 RHEL6 的虚拟机中黑屏?

linux - 在 Linux 上连接两个文件