Ansible正则表达式以匹配字符串并提取行

时间:2019-07-03 11:28:48

标签: regex ansible

我正在尝试在一行中的1个空格之后找到一个字符串,如果存在,则提取完整行并将其存储在另一个变量中。我正在使用ansible和正则表达式。如果字符串存在于其他任何地方,则不应匹配。

我尝试使用regex_match并选择但出现错误。

  vars:
    input : "{{ lookup('template', '{{ file }}') }}"
    target: "{{ input | regex_search('^(?=.*\b INPUT\b)(?:\S+){1}(\S*.*)')}}"

错误总是出现在同一位置“(?:\ S +)”。

ERROR! Syntax Error while loading YAML.
  found unknown escape character 'S'

The offending line appears to be:

    input : "{{ lookup('template', '{{ file }}') }}"
    target: "{{ input | regex_search('^(?=.*\b INPUT\b)(?:\S+){1}(\S*.*)')}}"

^ here
    input : "{{ lookup('template', '{{ file }}') }}"
    target: "{{ input | select('match', '^(?=.*\b INPUT\b)(?:\S+){1}(\S*.*)' | list | first}}"

^ here

我也尝试为/包含转义字符,但也出现错误。

ERROR! Syntax Error while loading YAML.
  found unknown escape character 'S'

The offending line appears to be:

   input : "{{ lookup('template', '{{ file }}') }}"
    target: "{{ input | regex_search('^(?=.*/\b INPUT/\b)(?:/\S){1}(/\S*.*)')}}"
                                                                                ^ here

我的变量文件

-P INPUT ACCEPT
-A INPUT -s 1.1.1.1/32 -j ACCEPT
-A INPUT -s 2.2.2.2/32 -j ACCEPT
-A INPUT -s 3.3.3.3/32 -j ACCEPT
-A INPUT -j RH-Firewall
-N RH-Firewall
-A RH-Firewall -j INPUT
-A RH-Firewall -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A RH-Firewall -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A RH-Firewall-1 -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A RH-Firewall -p icmp -m icmp --icmp-type 11 -j ACCEPT

target_rule_set应该仅包含前5行。如果我为RH-Firewall进行匹配,则它应该包含第6-11行。

1 个答案:

答案 0 :(得分:1)

您可以将<h:form id="DashboardForm">regex_findall一起使用:

multiline=True

请参见regex demo。详细信息:

  • (?m)^\S+\s+INPUT\b.* -由于使用了^,因此开始一行
  • (?m)-1个以上非空格字符
  • \S+-超过1个空格
  • \s+-INPUT\b整个词
  • INPUT-该行的其余部分。

在代码中:

.*