我需要从文件中删除以特定字符串开头的文本 -
control_center_basic_users:
- 直到文件末尾
control_center_basic_users:
admin:
principal: admin
password: ''
roles: admin
我已经尝试过以下方法(在 EOF 的 SO 问题上找到)
- name: cleanup the file
ansible.builtin.replace:
path: /tmp/kafka_users_test.yaml
regexp: '^(\s*)control_center_basic_users:[^[]+'
replace: ''
backup: yes
但这行不通。我还没有找到一种方法可以包含 EOF 之后的所有内容。如何设置正则表达式以包含文件末尾之前的所有内容?
我还尝试了
(.*?)((control_center_basic_users:)|$)
,它标识了 control_center_basic_users:
和最后一行,但不是完整的块。我怎样才能做到这一点?
给出测试文件
shell> cat /tmp/test.yaml
var1: foo
var2: bar
control_center_basic_users:
- user1
- user2
参数regexp表示:
特殊字符匹配除换行符之外的任何字符....
这意味着下面的正则表达式仅匹配单行
- replace:
path: /tmp/test.yaml
regexp: '^\s*control_center_basic_users:.*$'
replace: ''
给出(使用选项运行--check --diff)
--- before: /tmp/test.yaml
+++ after: /tmp/test.yaml
@@ -1,5 +1,5 @@
var1: foo
var2: bar
-control_center_basic_users:
+
- user1
- user2
如果您想选择其余字符直到文件末尾,请使用与任何字符匹配的
[\S\s]
(信用@Nick)。例如,
- replace:
path: /tmp/test.yaml
regexp: '^\s*control_center_basic_users:[\S\s]*$'
replace: ''
做你想做的事
--- before: /tmp/test.yaml
+++ after: /tmp/test.yaml
@@ -1,5 +1,2 @@
var1: foo
var2: bar
-control_center_basic_users:
- - user1
- - user2