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)
这是你想要的吗?我不确定前导间距。
推荐阅读
- r - 展开列以查找最大/最小观测值
- python - 使用 pandas 将 Unix 13 位转换为日期时间/时间戳格式
- flutter - 如何在flutter中使用firestore刷新streamBuilder
- javascript - 如何将自定义值传递给现有函数(不更改函数)?
- sql - 过滤仅包含数字(不包括字母)的 ID
- vb.net - 如何读取 Outlook RecurrencePattern.DayOfWeekMask 的值?
- regex - 正则表达式不应包含字符,除非
- prometheus - 获取警报处于状态的秒数
- node.js - 安装本地包时如何修复纱线错误?
- java - 我有一个变量,但 Java 将它们视为两个