我是 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/