我有一个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
答案 0 :(得分:2)
尝试这个grep行:
grep -Po "'active'=\K\S*"
答案 1 :(得分: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
N.B:egrep相当于grep的“-E”选项。
答案 2 :(得分:1)
另一个gnu awk
awk '{print gensub(/.*active.=(.*) .*/,"\\1","g")}' file
0
答案 3 :(得分:0)
awk '{ match($0,/'active'=(.*) /,a); print a[1]}' file