2015-08-14 78 views
7

我正在使用[文件查找]讀取整個文件並將內容存儲在變量中。我的打法看起來是這樣的:如何從Ansible中的lookup()模塊的結果中刪除斷行符「 n」?

- name: Store foo.xml contents in a variable 
    set_fact: 
    foo_content: "{{ lookup('file', 'foo.xml') | replace('\n', '')}}" 

所以上面的代碼讀取文件非常好,並將其存儲在變量,但問題是當中有換行符,還包括線路中斷在變量中。

我這個文件:

<?xml version="1.0" encoding="utf-8"?> 
<initialize_param> 
    <secrets> 
     <my_secret id="99">3VMjII6Hw+pd1zHV5THSI712y421USUS8124487128745812sajfhsakjfasbfvcasvnjasjkvbhasdfasgfsfaj5G8A9+n8CkLxk7Dqu0G8Jclg0eb1A5xeFzR3rrJHrb2GBBa7PJNVx8tFJP3AtF6ek/F/WvlBIs2leX2fq+/bGryKlySuFmbcwBsThmPJC5Z5AwPJgGZx</my_secret> 
    </secrets> 
</initialize_param> 

輸出刪除換行符\ n也incudes標籤\ r & \ t

我需要擺脫了\n的,需要得到擺脫額外的格式化(\ r & \ t),而且在替換過濾器之後,我在發出數據庫更新查詢時收到錯誤爲

stderr: /bin/sh: 1: cannot open ?xml: No such file 
+0

我的猜測是,\ n是調試輸出的只是假象,它是正確處理出現。 –

+0

nope,它實際上將它存儲爲\ n,然後當我在數據庫中推入該變量時,它會拋出一個錯誤: –

+0

您能否澄清一下哪種錯誤以及如何推送到數據庫? –

回答

11

你可以用replace filter做到這一點嗎?

contents: "{{ lookup('file', '/etc/foo.txt') | replace('\n', '')}}" 
+0

是的,它確實如此..但是如果txt文件被替換爲.xml .. m可能會重構我的問題 –

+1

如何在查找中使用多個替換?我試圖刪除更多像\ r soo這樣的文字記錄器 內容:{{lookup('file','/etc/foo.txt')| replace('\ n','')| replace '\ r','')}}「 –

+0

你的例子是正確的。那是怎麼做到的。 – udondan

8

使用神社trim過濾器:

"{{ lookup('file', 'foo.xml') | trim }}" 
+0

哇,它的工作。我發誓我在這工作了好幾個小時。在我嘗試使用uri_module發佈到服務器的JSON字符串中有一個\ n尾部。替換('\ n','')沒有擺脫它,我想,到底什麼,我會嘗試這個,並且它工作。哎呀。我認爲這有多個層面的問題,但謝謝你,先生! –