github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/md/add_pattern.md (about)

     1  ### `add_pattern()` {#fn-add-pattern}
     2  
     3  函数原型:`fn add_pattern(name: str, pattern: str)`
     4  
     5  函数说明:创建自定义 grok 模式。grok 模式有作用域限制,如在 if else 语句内将产生新的作用域,该 pattern 仅在此作用域内有效。该函数不可覆盖同一作用域或者上一作用域已经存在的 grok 模式
     6  
     7  参数:
     8  
     9  - `name`:模式命名
    10  - `pattern`: 自定义模式内容
    11  
    12  示例:
    13  
    14  ```python
    15  # 待处理数据:"11,abc,end1", "22,abc,end1", "33,abc,end3"
    16  
    17  # pipline 脚本
    18  add_pattern("aa", "\\d{2}")
    19  grok(_, "%{aa:aa}")
    20  if false {
    21  
    22  } else {
    23      add_pattern("bb", "[a-z]{3}")
    24      if aa == "11" {
    25          add_pattern("cc", "end1")
    26          grok(_, "%{aa:aa},%{bb:bb},%{cc:cc}")
    27      } elif aa == "22" {
    28          # 此处使用 pattern cc 将导致编译失败:no pattern found for %{cc}
    29          grok(_, "%{aa:aa},%{bb:bb},%{INT:cc}")
    30      } elif aa == "33" {
    31          add_pattern("bb", "[\\d]{5}") # 此处覆盖 bb 失败
    32          add_pattern("cc", "end3")
    33          grok(_, "%{aa:aa},%{bb:bb},%{cc:cc}")
    34      }
    35  }
    36  
    37  # 处理结果
    38  {
    39      "aa":      "11"
    40      "bb":      "abc"
    41      "cc":      "end1"
    42      "message": "11,abc,end1"
    43  }
    44  {
    45      "aa":      "22"
    46      "message": "22,abc,end1"
    47  }
    48  {
    49      "aa":      "33"
    50      "bb":      "abc"
    51      "cc":      "end3"
    52      "message": "33,abc,end3"
    53  }
    54  ```