2016-09-27 200 views
-1

開始我需要一個正則表達式和替換表達式捕捉來自CSV文件的內容。我的CSV文件是這樣開始的。

例 - 表達應該在我的CSV文件中找到鍵值名「FC_host」,並以不同的值替換。

$TH_appName=tuipatthcrfh3320 
#$TH_host=10.145.129.75 
$TH_host=10.145.129.75 
$TH_casPort=8500; 
$TH_eacPort=8888; 
$FC_appName=tuipatfc3320; 
#$FC_host=10.145.129.75 
$FC_host=10.145.129.75 
$FC_casPort=8500; 
$FC_eacPort=8888; 

以下是我的代碼。此代碼的工作,但幾乎沒有problem.Kindly幫助我。此外,我正在使用正則表達式和替換,以便我需要在遠程服務器更新它們。

--- 
    - hosts: local 
    vars: 
     properties: 
     - { name: "TH_appName", value: "10.0.1" } 
    tasks: 
     - name: Find and Replace 
     replace: 
      dest: /etc/ansible/kalyan-tui/example.csv 
      regexp: '(.*){{ item.name }}=(.*);' 
      replace: '\1{{ item.name }}={{ item.value }};' 
     # state: present 
     with_items: 
      - "{{ properties }}" 
+0

您摘錄甚至還沒有接近到CSV格式是... – jbndlr

+0

\ $應該逃避特殊字符$ –

+0

好像你的查找/替換的是一個框架的一些模塊和''$ { {...}}看起來像模板替換。你有沒有在這方面嘗試常見的正則表達式某事像'' '\ $ TH_appName =。+?\ n'''爲正則表達式和''' $ TH_appName = myNewValue \ n'''作爲替代? – jbndlr

回答

0

的任務應該是這樣的:

- name: Find and Replace 
    replace: 
    dest: /etc/ansible/kalyan-tui/example.csv 
    regexp: ^\$FC_host=.* 
    replace: "$FC_host={{ new_value }}" 

  • state不是replace參數
  • 變量名不能包含空格
  • 你不需要引用regexp
  • 你不需要逃避在T美元符號他替換值
0
with open('items.csv', 'r')as file: 
for row in file: 
    print row.replace('TH_host', 'Something else') 

>>$TH_appName=tuipatthcrfh3320 
>>#$Something else=10.145.129.75 
>>$Something else=10.145.129.75 
>>... 

,除非你需要使用正則表達式,如位數或一定數量的空間你不需要正則表達式。正則表達式非常昂貴,因此如果可能的話應該是avoided