【发布时间】:2019-07-03 20:58:09
【问题描述】:
我试图在一行中的 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 行。
【问题讨论】: