首页 > 解决方案 > 如何替换未知字符串?

问题描述

我正在编写一本剧本,我需要找到一种方法来替换我将在变量中拥有的值的一些特定值(如下例所示)。问题是,每次我运行剧本时,要替换的值都会有所不同。

define( 'DB_NAME', 'somestring' );
define( 'DB_USER', 'somevalue' );
define( 'DB_PASSWORD', 'someothervalue' );

我正在考虑模块ansible.builtin.replace甚至模块shell,但我仍然无法找到使其工作的方法。我是 ansible 和 IT 的新手,我还是不明白正则表达式是如何工作的。

我正在尝试这样,但正如你所看到的,我完全不知道我在做什么:

- name: Replace between the expressions (requires Ansible >= 2.4)
  ansible.builtin.replace:
    path: /home/marcelo/public_html/wp-config.php
    after: "define( 'DB_NAME', '"
    before: "');"
    regexp: "*"
    replace: "{{ DBNM }}"

一些我可以用来开始的建议或例子会有很大帮助。

标签: regexansible

解决方案


使用替换模块是要走的路。您已经以正确的方式思考afterand before,但那些匹配整行,而不是它的一部分(您可以通过这个指定文件中应该发生替换的部分)。
在您的情况下,您需要将所有逻辑打包到正则表达式中:

- name: Replace between the expressions (requires Ansible >= 2.4)
  ansible.builtin.replace:
    path: /home/marcelo/public_html/wp-config.php
    regexp: "define\\( 'DB_NAME', '.*' \\);"
    replace: "define( 'DB_NAME', '{{ DBNM }}' );"

推荐阅读