【发布时间】:2018-01-19 22:34:45
【问题描述】:
我需要匹配一个字符串NAME ALL=(ALL) NOPASSWD: ALL
但是我被括号卡住了。
我使用了一个网站来帮助我构建表达式,但无法弄清楚。
到目前为止,我得到了:
\sNAME\sALL=\(ALL\)\s\s\s\s\s\s\sNOPASSWD:\sALL
但是,这没有括号符号...
我还使用了大量的\s,我确定有更好的方法吗?
我正在使用 Ansible Lineinfile 模块来删除该行。 感谢所有帮助,谢谢!
编辑:以防万一,我的小剧本补充说,可能是我在那里做错了什么:
嗨。
是的,它在所有这些生成器中都匹配,但无论出于何种原因,我都无法让它在我的剧本中运行,我是个白痴还是这样?
- hosts: all
become: true
tasks:
- name: Remove user
lineinfile:
dest: /etc/sudoers
regexp: '^.*NAME.*$'
state: 'absent'
【问题讨论】:
-
您是否需要完全匹配该字符串而不需要其他任何内容?空间数量等没有灵活性?
-
使用
\s+而不是多个\ss。如果你想更具体,你可以做\s{7}= 7 times\s -
因为如果是这种情况,您发布的正则表达式应该可以解决问题,请查看:regex101.com/r/38xmc2/1
-
@GalAbra,如果空格或换行符太多,OP可能不想匹配。在这种情况下,
\s+不会有任何好处。 -
@AdrienBrunelat 因为这是一个非常具体的正则表达式,所以我认为它已经足够好了。但无论如何,我已经在我的评论中添加了
\s{7}选项