如何替换 ansible 中的特殊字符


我想

问一下,如何替换 ansible 中的特殊字符。当我在 ansible 中打印出标准输出时,我已经转义了字符,我想从输出中删除这些字符。例如

e[0m

我试过replace('\e[0m', ''),但没有用。.我做错了什么?

谢谢

更新:

    - name: Running the docker image 
      command: docker run "{{ image_name }}"
      register: result
    - debug:
        msg: "{{ result.stdout_lines  | replace('\e[0m'', '')| replace('\t', '') }}"
      when: result.stdout_lines is defined

但输出仍然是:

"e[1mTEST1 e[0me[0;32m[OK]e[0m"

SH 生成颜色和格式:

BOLD='33[1m'
RED='33[0;31m'
GREEN='33[0;32m'
BLUE='33[0;34m'
YELLOW='33[0;33m'
NC='33[0m' # No Color

因此,不知何故33会导致e

您有两个主要问题:result.stdout_lines 是一个数组,而不是一个字符串; 您看到的输出可能与通过替换过滤器的输出不同。

要解决此问题,您应该强制通过 replace 发送的内容为字符串。 尽管第二个元素只对第一个元素进行操作,但其中任何一个都应该这样做。

    msg: "{{ ''.join(result.stdout_lines)  | replace('\e[0m', '')| replace('\t', '') }}"
    msg: "{{ result.stdout_lines[0]  | replace('\e[0m', '')| replace('\t', '') }}"

您还可以使用地图过滤器,如下所示:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html 替换。

如果您只想简单地获取输出而没有某些文本,我建议您使用第一种形式。 如果你打算经常重用这种模式,我建议弄清楚map+regex_replace。

最新更新