2017-01-03 19 views
1

模式匹配我有一個線路輸出如下打印多值後,在單行

"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_sta

示例值:

5 
10 
15 
3 

我曾嘗試以下,但其印刷圖案僅匹配,

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

OUTPUT:

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" 
+0

那你試試? – Inian

+0

已嘗試以下但其打印模式僅匹配, cat myfile.txt | grep的-Po '(NG-用戶num_sta。)[^ \ S] *' OUTPUT: NG-用戶num_sta 「 NG-用戶num_sta」 NG-用戶num_sta」 NG-用戶num_sta「 ng-user-num_sta」 ng-user-num_sta「 ng-user-num_sta」 ng-user-num_sta「 –

回答

1

regEx比賽是不正確,使用GNU grep-P,啓用PCRE模式和\K忽略模式匹配上到這一點。

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

檢查regExhere

+0

它工作。 Thx Mr @Inian :) –

+1

我建議用一個空白來代替','以擺脫尾隨空白。 – Cyrus

0

這樣好嗎?

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

5 
10 
15 
3 
+0

OP只想得到'ng-num_sta'的值......你爲_lines提供的值不匹配'xyz'_;儘管你的回答在OP提供的小例子中給出了正確的輸出,但你當然不會回答這個問題。我的意思是這個:如果我回答'printf'%s \ n'5 10 15 3'會怎麼樣。在OP的例子中,它會給出正確的答案,但那肯定不是一個有效的答案。 –