如何替换ansible中的特殊字符

如何替换ansible中的特殊字符,ansible,Ansible,我想问一下,如何替换ansible中的特殊字符。 在ansible中打印标准输出时,我有转义字符,我想从输出中删除这些字符。 e、 g 我尝试了替换('\\e[0m',''),但它不起作用。我做错了什么 多谢各位 更新: - name: Running the docker image command: docker run "{{ image_name }}" register: result - debug: msg: "{{ re

我想问一下,如何替换ansible中的特殊字符。 在ansible中打印标准输出时,我有转义字符,我想从输出中删除这些字符。 e、 g

我尝试了
替换('\\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[0m\e[0;32m[OK]\e[0m"
sh生成颜色和格式:

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

因此,不知何故,
\033
导致了
\e

您有两个主要问题:result.stdout\u行是一个数组,而不是一个字符串;您看到的输出可能与通过replace过滤器得到的输出不一样

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

    msg: "{{ ''.join(result.stdout_lines)  | replace('\\e[0m', '')| replace('\\t', '') }}"
您还可以使用映射过滤器,如下所示:替换


如果你只想得到没有特定文本的输出,我建议你使用第一种形式。如果你想经常重用这种模式,我建议你找出map+regex\u replace。

你能提供一个生成这些字符的代码示例吗?你能给我们一个示例剧本吗?如果我们知道什么是produ,可能会有所帮助对转义序列进行排序…伟大的思想都是一样的…@Nick更新,\\t被替换,但\\e…不起作用。代码是由sh脚本生成的,然后输出是“\e[1mTEST1\e[0m\e[0;32m[OK]\e[0m”。很好的回答。我只想补充一句,你可以用“result.stdout”代替“'.”。join(result.stdout_行)或“result.stdout_行[0]”
    msg: "{{ ''.join(result.stdout_lines)  | replace('\\e[0m', '')| replace('\\t', '') }}"
    msg: "{{ result.stdout_lines[0]  | replace('\\e[0m', '')| replace('\\t', '') }}"