2016-09-24 31 views
1

只想看看X_RULE的值。我的輸入文件可能有模式,如如何使用awk獲取特定的grepped模式的值

TMP_LEARN A B 
-antmove [ X_RULE = "STUDENT" ] 
-antmove [ X_CLASS = "COMMERCE" ] 
-antmove [ X_DISCRIPTION = "COLLEGE STUDENTS" ] 
... 
... 


TMP_PROP -antmove [ X_RULE = "STUDENT" ] -antmove [ X_CLASS = "SCIENCE" ] ..... 

簡單

grep "X_RULE" inputFile |awk -F " " '{print $1}' 

將返回第一圖案正確的結果,但不會在第二模式工作。我該如何使用

regex(i.e -- (/^\s*\[\s*X_RULE\s*=\s*([^\]]+)\]) ...) 

shell在這種情況下隔離值?

問候, Divesh

+0

你要買收集/打印出來的文件中所有出現? – stevieb

+0

您的預期產出是多少? – anubhava

+0

我只是希望得到X_RULE的值,在上面的例子中,這兩個模式都是STUDENT。在我的實際文件中,X_RULE的值在每個模式中都是唯一的。謝謝@ divesh – user3093942

回答

0

您可以使用grep -oP輸入的兩條線這種常見的正則表達式:

grep -oP 'X_RULE\s*=\s*"\K[^"]+' file 

STUDENT 
STUDENT 

正則表達式破碎:

X_RULE # match literal text X_RULE 
\s*=\s* # match = surrounded by optional spaces on each side 
"  # match starting double quote 
\K  # match reset to forget what we've matched so far 
[^"]+ # match 1 or more of anything that is not " to get desired value 
+1

非常感謝Anubhava,這對我的需求來說非常完美。 – user3093942

0

修改anubhabva的例子爲每我的要求,並得到了我所需要的。

grep X_RULE $i | grep -oP 'X_RULE\s*=\s*"[^"]+' | awk -F " " '{print $3}' | sed -e 's/\"//' | sort -u >> tmp_a.list 

再次,非常感謝您的快速幫助anubhava。

問候, Divesh

相關問題