首页 > 解决方案 > grep 两个模式之间的字符串 文件中的多个实例?

问题描述

我是 bash 脚本的新手,我需要制作一个脚本,该脚本将遍历有关已运行作业的日志文件,我需要提取某些值,例如使用的内存,然后是计算使用的内存所请求的内存。

首先,我只是尝试获取一个 grep 命令,该命令将 grep 文件中两个模式之间的值,这将是我编写此脚本的起点。

该文件看起来像这样:

20200429:04/29/2020 04:25:32;S;1234567.vpbs3;user=xx group=xxxxxx=_xxx_xxx_xxxx jobname=xx_xxxxxx queue=xxx ctime=1588148732 qtime=1588148732 etime=1588148732 start=1588148732 exec_host *8 exec_vnode=(xx2:mem=402653184kb:ncpus=8) Resource_List.mem= 393216mb Resource_List.ncpus=8 Resource_List.nodect=1 Resource_List.place=free Resource_List.preempt_targets=NONE Resource_List.Qlist=xxxq Resource_List.select=1 :mem=393216mb:ncpus=8 Resource_List.walltime=24:00:00 resource_assigned.mem= 402653184kb resource_assigned.ncpus=8

粗体的值是我需要提取的。它有多个工作和日期,因此该文件继续包含多个段落,例如具有不同日期和数字的数据。

通过在线查看类似问题,我想出了:

egrep -Eo 'Resource_List.mem=.{1,50}' sampleoutput.txt | cut -d "=" -f 2- 

我得到了多行:

393216mb Resource_List.ncpus=8 Resource_List.nodec

而且我对如何只获得'393216mb'感到困惑,因为我从未真正使用过grep或削减太多。任何建议,即使它不使用 grep,也将不胜感激!

标签: bashgrep

解决方案


很接近!.是通配符,要匹配数字。

egrep -Eo 'Resource_List.mem=[0-9]*..' sampleoutput.txt

推荐阅读