Ansible - 替换文件中的行

标签 ansible

我是 Ansible 的新手,但我遇到了替换模块的问题。

我在线尝试了我的正则表达式 https://regex101.com/它奏效了。

然后我在我的 Ansible 中尝试了正则表达式,但它不起作用。 我还尝试使用 lineInFile 模块。 猜猜我不知何故仍在思考旧的方式而不是正确的 Ansible 方式。因此我无法将它们放在一起。

- name: Update the CMakeLists, add -latomic
  replace:
    path: /home/{{ device_user }}/ros2_{{ ros2_distro }}/src/ros2/rcutils/CMakeLists.txt
    regexp: '^\s+target_link_libraries\(test_atomics_executable\s+\${PROJECT_NAME}'
    replace: '^\s+target_link_libraries\(test_atomics_executable\s+\${PROJECT_NAME} -latomic\)'

这些行产生:

The error was: re.error: bad escape \s at position 1

我不知道为什么会这样,因为正则表达式没问题,不是吗? 我试图找到完全匹配我知道只有一行是这样的。

我正在尝试进行更改的 CMakeLists.txt:

  ...
  target_link_libraries(test_atomics_executable ${PROJECT_NAME})
  if(HAVE_LIBATOMICS)
    target_link_libraries(test_atomics_executable atomic)
  endif()
  add_test(NAME test_atomics COMMAND test_atomics_executable)
  ...

你能告诉我我做错了什么吗? (请不要费心只链接我已经在那里并尝试阅读的文档。)

最佳答案

错误

 re.error: bad escape \s at position 1

指向参数replace中的第一个位置

 replace: '^\s+target_link_libraries ... '

参数replace不是正则表达式。尝试

- replace:
    path: CMakeLists.txt
    regexp: '^\s+target_link_libraries\(test_atomics_executable\s+\${PROJECT_NAME}\)(.*)$'
    replace: '  target_link_libraries(test_atomics_executable ${PROJECT_NAME} -latomic)'

这应该替换文件中的第一行

-  target_link_libraries(test_atomics_executable ${PROJECT_NAME})
+  target_link_libraries(test_atomics_executable ${PROJECT_NAME} -latomic)

这是你想要的吗?我不确定前导间距。

关于Ansible - 替换文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66154259/

相关文章:

Ansible:列表的 pretty-print 元素

linux - 我如何在linux中使用ansible安装模块

linux - 使用ansible时args must be a dictionary error

Ansible - 如何以提升的权限执行 powershell win_command

postgresql - 如何使 psql 进程在 ansible 中幂等?

error-handling - ansible-playbook bootstrap.yml命令中的tidb-ansible错误

Ansible,set_fact使用if then else语句

pip - Ansible:在单个 session 上安装多个 Python 包

ansible - 在 Ansible/Jinja2 中格式化项目列表

ansible - 如何在 Ansible 剧本中获取 --limit 参数的值?