我正在尝试确保在源文件中注释掉某个特定行。
这条线是这样的:
CFUNCTYPE(c_int)(lambda: None)
如果存在,我想将其评论出来:
# CFUNCTYPE(c_int)(lambda: None)
如果它不存在,请忽略它。
如果它已存在且已经注释掉,则不执行任何操作。
这是我写的剧本,但它不起作用。
tasks:
- name: fix ctypes file
lineinfile: dest='/usr/local/lib/python2.7/ctypes/__init__.py' regexp="^#?CFUNCTYPE(c_int)(lambda: None)" line='# CFUNCTYPE(c_int)(lambda: None)'
错误说:
这个看起来容易修复。行中似乎有一个额外的不带引号的冒号 这让解析器感到困惑。只期待找到一个免费的 结肠。解决方案只是在冒号周围添加一些引号,或引用 第一次结肠后的整行。
然而,修复起来并不容易,而且我试着以我能想到的各种方式引用它,但无济于事。
答案 0 :(得分:0)
我使用了这个引用:
lineinfile: "dest='/usr/local/lib/python2.7/ctypes/__init__.py' regexp='^#?CFUNCTYPE(c_int)(lambda: None)' line='# CFUNCTYPE(c_int)(lambda: None)'"
为了忽略不存在的文件,我使用了以下代码:
- stat: path=/usr/local/lib/python2.7/ctypes/__init__.py
register: init
- name: fix ctypes file
replace: "dest='/usr/local/lib/python2.7/ctypes/__init__.py' regexp='^( CFUNCTYPE.c_int..lambda: None.)' replace=' # CFUNCTYPE(c_int)(lambda: None)'"
when: init.stat.exists == True
sudo: yes
我还必须更改lineinfile以替换,因为该行以4个空格为前缀,我无法正确匹配。
答案 1 :(得分:0)
这是YAML的限制;解析器可能想要查看名称,冒号和名称=值对,在行上没有更多冒号,或只是名称,冒号和1引用的字符串值。
lineinfile
doc提供了一个示例,表示sudoers提到这个(以及另一个没有提到的工作......)并且它引用了YAML作为问题。这意味着任何时候你需要在一个值中有一个冒号,你可以引用整个参数字符串只是为了节省调试麻烦。