2016-09-27 3 views
-1
으로 시작하는 CSV 파일의 표현식 바꾸기

CSV 파일에서 내용을 캡처하려면 Regexp 및 Replace 표현식이 필요합니다. 내 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; 

아래 코드는 제 코드입니다. 이 코드는 작동하지만 몇 가지 문제점이 있습니다. 친절하게 도와 드리겠습니다. 또한 regexp를 사용하고 대체하므로 원격 서버에서이를 업데이트해야합니다.

--- 
    - 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

은 ... – jbndlr

+0

$ \ $ –

+0

보이는 특수 문자를 탈출한다 {...}}''템플릿 대체물처럼 보입니다. 이것에 대한 일반적인 정규 표현식을 시도 했습니까? sth는'' '\ $ 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을 인용 할 필요가 없습니다 값
  • 달러 기호를 벗어날 필요가 없습니다. 검색/대체 어떤 프레임 워크의 모듈과``$가 {것처럼 그는 대체 값 귀하의 발췌 CSV 형식에있는 꿈에도하지
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 
>>... 

당신이 그런 자리의 숫자 나 공간의 특정 숫자로 정규 표현식을 사용할 필요하지 않는 한 당신은 정규식이 필요하지 않습니다. Regex는 매우 비싸므로 가능하면 avoided이어야합니다.