Bash 单行模式匹配后打印多值

Bash 单行模式匹配后打印多值,bash,Bash,我有如下单线输出 "ng-num_sta" : 5 , "ng-num_sta" : 10 , "ng-num_sta" : 15 , "ng-num_sta" : 3 , xyz value : 1 , blah blah, single line 我只想获取字符串ng-num\u sta的值 例如: 5 10 15 3 我已经试过了,但它的打印模式只匹配 cat myfile.txt | grep -Po '(ng-user-num_sta.)[^\s]*' 输出: ng-us

我有如下单线输出

"ng-num_sta" : 5 , 
"ng-num_sta" : 10 ,
"ng-num_sta" : 15 , 
"ng-num_sta" : 3 , 
xyz value : 1 , blah blah, single line
我只想获取字符串
ng-num\u sta
的值

例如:

5
10
15
3

我已经试过了,但它的打印模式只匹配

 cat myfile.txt | grep -Po '(ng-user-num_sta.)[^\s]*'
输出:

ng-user-num_sta"
ng-user-num_sta"
ng-user-num_sta"
ng-user-num_sta"
ng-user-num_sta"
ng-user-num_sta"
ng-user-num_sta"
ng-user-num_sta"

您的
regEx
匹配不正确,请使用
GNU grep
-p
PCRE
模式启用为和
\K
忽略该点之前的模式匹配

grep -oP '\"ng-num_sta\" : \K[^ ]*' file
5
10
15
3
检查
regEx

这样可以吗

awk '$1 ~ /ng-num_sta/{print $3}' file

5
10
15
3

您尝试了什么?尝试了以下内容,但其打印模式仅匹配,cat myfile.txt | grep-Po'(ng-user-num(sta.)[^\s]*'输出:ng-user-num(sta“ng-user-num)sta“ng-user-num(sta”ng-user-num)sta“ng-user-num(sta”ng-user-num)sta”我建议替换
通过一个空格来去除尾随空格。OP只想获取
ng-num_sta
的值。。。为不匹配的行指定值
xyz
;虽然您的答案在OP提供的小示例中给出了正确的输出,但您肯定没有回答这个问题。我的意思是:如果我回答了
printf'%s\n'5105153
,该怎么办。在OP的例子中,它会给出正确的答案,但这肯定不是一个有效的答案。