免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3190 | 回复: 12
打印 上一主题 下一主题

正则提取 [复制链接]

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-14 16:12 |只看该作者 |倒序浏览

$str = 'Cpu(s):  4.2%us,  0.2%sy,  0.1%ni, 95.2%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st'

如何提取出95.2  ,就是后面有%id的那个。

试了好久。

论坛徽章:
0
2 [报告]
发表于 2012-06-14 16:26 |只看该作者
本帖最后由 sai9924 于 2012-06-14 16:27 编辑

$str =~ m#(\d{1,2}.\d+\%id)#;

论坛徽章:
0
3 [报告]
发表于 2012-06-14 16:27 |只看该作者
  1. my ($capture) = $str =~ /([\d.]+)%id/;
  2. print $capture;
复制代码

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
4 [报告]
发表于 2012-06-14 16:27 |只看该作者
zhu@ubuntu:~/perl$ perl reg.pl
95.2
zhu@ubuntu:~/perl$ cat reg.pl
  1. $str = 'Cpu(s):  4.2%us,  0.2%sy,  0.1%ni, 95.2%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st';
  2. $str =~ /.* (\d+.\d+)\%id/;
  3. print "$1\n";
复制代码
zhu@ubuntu:~/perl$

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
5 [报告]
发表于 2012-06-14 16:33 |只看该作者
  1. $str =~ /([\d+\.\d+]+)%id/;
  2. print "$1\n";
复制代码

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2012-06-14 16:38 |只看该作者
Cpu(s):  4.2%us,  0.2%sy,  0.1%ni, 95.2%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st

大家帮看一下,上面这个是用top获取的CPU值,然后提取,但是出不来:
  1. perl -e 'my @cpuinfo = `top -n 1`;my ($cpu_line) = grep {/^Cpu/} @cpuinfo;my ($idle_load) = $cpu_line =~ /(\d+\.\d+)%id/;print $idle_load'
复制代码
不知是哪里错了。


论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2012-06-14 16:49 |只看该作者
回复 6# ecjtubaowp

try this one, you will see what happen
$ top -n 1 | head -3 | hexdump -C
...
000001f0  33 39 3b 34 39 6d 1b 28  42 1b 5b 6d 20 39 39 2e  |39;49m.(B.[m 99.|
00000200  34 25 1b 28 42 1b 5b 6d  1b 5b 33 39 3b 34 39 6d  |4%.(B.[m.[39;49m|
00000210  69 64 2c 1b 28 42 1b 5b  6d 1b 5b 33 39 3b 34 39  |id,.(B.[m.[39;49|
...

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
8 [报告]
发表于 2012-06-14 17:04 |只看该作者
  1. top -n1 | grep -i 'cpu(s)' | cut -d, -f4 | cut -d% -f1
复制代码

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
9 [报告]
发表于 2012-06-14 17:15 |只看该作者
现在是要用perl搞,那个命令行是程序中的一部分。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2012-06-15 02:40 |只看该作者
回复 9# ecjtubaowp


    use `top -n 1 -b`, instead of  `top -n 1`

-b : Batch mode operation
            Starts top in "Batch mode", which could be useful for sending out-
            put from top to other programs or to a file.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP