2016-09-24 30 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

相关问题