【问题标题】:how to get value of a specific grepped pattern using awk如何使用 awk 获取特定 grepped 模式的值
【发布时间】:2017-02-02 06:44:58
【问题描述】:

只希望获得 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 上隔离值?

问候, 潜水

【问题讨论】:

  • 您是否要收集/打印文件中的所有事件?
  • 你的预期输出是什么?
  • 我只想获得 X_RULE 的值,在上述情况下,这两种模式都是 STUDENT。在我的实际文件中,X_RULE 的值在每个模式中都是唯一的。谢谢@divesh

标签: perl shell unix awk sed


【解决方案1】:

您可以将这个通用正则表达式用于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

【讨论】:

  • 感谢 Anubhava,这非常符合我的要求。
【解决方案2】:

根据我的要求修改了 anubhabva 的示例并得到了我真正需要的东西。

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

再次感谢 anubhava 的快速帮助。

问候, 潜水

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2017-05-12
    相关资源
    最近更新 更多