如何使用awk

时间:2016-09-24 13:57:51

标签: perl shell unix awk sed

只想获得X_RULE的价值。我的输入文件可能包含

等模式
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

2 个答案:

答案 0 :(得分:0)

您可以将此常用正则表达式用于grep -oP中的两行输入:

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

STUDENT
STUDENT

RegEx分手:

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 :(得分: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