只想获得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
答案 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