如何在ansible lineinfile regexp中指定不区分大小写的模式?

时间:2015-10-03 09:12:04

标签: regex ansible

简单的问题。 我正在尝试匹配“UseDns”,“usedns”和其他变体。

- name: Disable DNS checking on login (huge speedup)
  sudo: true
  lineinfile:
    dest:   "/etc/ssh/sshd_config"
    regexp:   "^[# \t]*[Uu][Ss][Ee][Dd][Nn][Ss] "
    # how does one specify case insensitive regexp in lineinfile?
    line:   "UseDNS no"
    state:  "present"
    create:  true
    insertafter: EOF
  notify:
    - sshd restart

1 个答案:

答案 0 :(得分:7)

Ansible使用Python re module。您可以在模式中使用inline modifiers,例如(?ism)。使用 i 进行不区分大小写的匹配:

regexp:   "(?i)^[# \t]*usedns "

内联修饰符适用于修饰符的常规扩展部分到右侧,可以使用-禁用。 (?-i)。这可以应用于仅对正则表达式的一部分实现不区分大小写。

例如,正则表达式(?i)use(?-i)DNS应与useDNSUseDNS匹配,但不能与useDnsUSEdns匹配。