![](/img/trans.png)
[英]How to replace a line which has multiple special characters with ansible playbook
[英]How to replace special characters in 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[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_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,帶有replace。
我建議使用第一種形式,如果您只想簡單地獲取沒有某些文本的輸出。 如果您要經常重用此模式,建議您弄清楚map + regex_replace。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.