如何替换ansible中的特殊字符

问题描述 投票:1回答:1

我想问一下,如何替换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[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

ansible
1个回答
0
投票

您有两个主要问题: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 with replace。

如果你想要的只是简单地获得没有特定文本的输出,我建议使用第一个表单。如果您要经常重复使用此模式,我建议找出map + regex_replace。

© www.soinside.com 2019 - 2024. All rights reserved.