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的例子中,它会给出正确的答案,但这肯定不是一个有效的答案。