0

我有一个 Linux 命令行来显示某个结果。从结果中,我想对其进行 grep 或使用 awk 来提取特定值。这是命令行的结果:

OK 0 seconds over max, 0 active processes, next process in the future|'overmax'=0s;300;600 'active'=0 'nextoldest'=-1153s

我想要的只是在'active'=之后显示值?在这种情况下为 0

4

4 回答 4

2

试试这个 grep 行:

grep -Po "'active'=\K\S*"
于 2013-10-25T14:25:23.713 回答
2

你可以像这样使用 egrep :

egrep -o "'active'=[^\ ]+"

例子 :

[ ~]$ str="OK 0 seconds over max, 0 active processes, next process in the future|'overmax'=0s;300;600 'active'=0 'nextoldest'=-1153s"
[ ~]$ echo $str|egrep -o "'active'=[^\ ]+"
'active'=0
[ ~]$ 

如果您确定正确的值是数字,您可以进一步限制这样的模式:

egrep -o "'active'=[0-9]+"

你也可以使用 sed :

[ ~]$ echo $str|sed "s/.*\('active'=[^\ ]*\).*/\1/g"
'active'=0

如果您只想获得正确的价值:

[ ~]$ echo $str|sed "s/.*'active'=\([^\ ]*\).*/\1/g"
0

您也可以使用 awk 但我认为在这种情况下这不是更好的解决方案。但只是为了好玩:

[ ~]$ echo $str|awk -F " " '{for (i=1; i <= NF; i++){if($i ~ ".?active.?="){print $i}}}'
'active'=0

注意:egrep 相当于 grep 的“-E”选项。

于 2013-10-25T22:43:53.297 回答
1

其他gnu awk

awk '{print gensub(/.*active.=(.*) .*/,"\\1","g")}' file
0
于 2013-10-25T20:43:22.250 回答
0
awk '{ match($0,/'active'=(.*) /,a); print a[1]}' file
于 2013-10-25T14:29:25.207 回答