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