我有下面的文件:
Scheduled jobs
Locale LANG set to the following: "en"
CONMAN:AWSBHU611W Conman could not initialize the HTTP or HTTPS connection.
Workstation Job Stream SchedTime Job State Pr Start Elapse ReturnCode Dependencies
HCPRODNWA #NW_HC_CA_BKP1 0106 02/13 **************************************** HOLD 10(02/13) (03:22)
NW_HC_CA_PREBKUP1B HOLD 10(02/13)(00:01)
NW_HC_CA_SANREPLICATION HOLD 10(02/13)(00:05)ΩNW_HC_CA_PREBKUP1B
NW_HC_CA_PPBACKUP HOLD 10(02/13)(03:17)
NW_HC_CA_SANREPLICATION
NW_HC_CA_GOLDCOPY HOLD 10(02/13)(00:01)
NW_HC_CA_SANREPLICATION
我想删除以“工作站作业...”开头的行之前的所有行
我的Ansible代码是:
- name: Extract job details
replace:
path: /tmp/tws_jobs
after: '(^Scheduled)'
before: '(^Workstation)'
regexp: '^(.*)$'
replace: ''
但我无法得到所需的输出。相反,我得到以下消息:
"msg": "Pattern for before/after params did not match the given file: (^Scheduled)(?P<subsection>.*?)(^Workstation)"
2条答案
按热度按时间pbpqsu0x1#
Q:***“之前/之后参数的模式与给定文件不匹配”***
更新(模块 * 替换 * 说明)
简短回答:
^
和$
匹配文件的开头和结尾。使用\n
匹配一行的开头和结尾。下面的任务删除行 after 和 before 之间的行在 --check --diff 中运行
详细信息:
文件的内容存储为字符串
给出了测试文件
声明默认参数以简化测试
1.匹配文件和行的开头
^a
匹配文件开头的a
\n
开始一个新行给予
1.匹配行的其余部分。在前面的示例中,第一行
a
之后的其余部分被删除。如果您想保留整行,请匹配其余部分。使“.”特殊字符匹配任何字符,包括换行符
?
匹配所有字符.*
直到新行\n
给予
来源
答:before 和 after 模式都不匹配文件中的任何一行。正确的模式应该是
但是这些模式也不起作用,可能是因为存在开放问题Replace module before/after still broken #47917。
可以在一个简化的示例中测试各种模式
任务
按预期工作
但都不是
也不是
更改文件中的任何内容
[1] https://github.com/ansible/ansible/issues/47917#issuecomment-686339762
vsikbqxv2#
尝试另一种方法:阻塞文件: