我想问一下,如何在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
答案 0 :(得分: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(带有替换)。
如果只需要获取没有特定文本的输出,我建议使用第一种形式。如果您要经常重用此模式,建议您弄清楚map + regex_replace。