2014-10-22 3 views
0

내가는 표준 입력을 조작하고 파이썬

  1. 그것이
  2. 을 표준 입력 값을 사용하는 간단한 파이썬 스크립트를 작성하려고 해요을에 stdout에 리디렉션하면과 출력을 특정 일치하는 단어를
  3. 패스를 대체 새로운 값을 표준 출력으로 되 돌리십시오.

나는 stdin에서 값을 가져 와서 일치하는 단어를 찾는 부분 만 가지고 있습니다.

<something>REPLACEME</something> 
<blah>UNTOUCH</blah> 

foo는

import re 
import sys 

for line in sys.stdin: 
    matchObj = re.search(r'<something>(.*)</something>',line) 
    if matchObj: 
     oldWord = matchObj.group(1) 
     print oldWord 

내용은 내가이 명령을 실행 이상적 경우

cat foo | ./test.py 

나는이

<something>NEWWORD</something 
<blah>UNTOUCH</blah> 
+0

RTFM ['re.sub()'] (https://docs.python.org/2/library/re.html?highlight=re.sub#re.sub). –

답변

1

같은 당신이 re.sub을 찾고 계십니까 얻을 것? 귀하의 예제 데이터에 위의 실행

import re 
import sys 

for line in sys.stdin: 
    sys.stdout.write(re.sub(r'(<something>)REPLACEME(</something>)', 
          r'\1NEWWORD\2', 
          line)) 

: 정규 표현식으로 XML을 구문 분석 아마 나쁜 생각이라고

$ echo '<something>REPLACEME</something>\n<something>UNTOUCH</something>' | python2 test.py 
<something>NEWWORD</something> 
<blah>UNTOUCH</blah> 

참고. Python 표준 라이브러리는 number of XML modules과 함께 제공됩니다.

다음은 예입니다 :

import sys 
import xml.etree.ElementTree 

tree = xml.etree.ElementTree.parse(sys.stdin) 
root = tree.getroot() 

for node in root.iter('something'): 
    if node.text == 'REPLACEME': 
     node.text == 'NEWWORD' 

tree.write(sys.stdout) 

가 위 똑같이 작동합니다 :

$ echo '<root><something>REPLACEME</something>\n<blah>UNTOUCH</blah></root>' | python2 test.py 
<root><something>REPLACEME</something> 
<blah>UNTOUCH</blah></root> 
0

전나무 당신이, 당신이있어 test.py: command not foundcat foo | ./test.py을 실행이 실행해야하는 경우 : cat foo |python ./test.py합니다.

다음 코드의 출력은 다음과 같습니다

REPLACEME 

하지만 당신이 원하는 출력을 위해, 당신은 사용할 필요가 re.sub() :

import re 
import sys 

for line in sys.stdin: 
    matchObj = re.sub(r'<something>(.*)</something>','<something>NEWWORD</something>',line) 
    if matchObj: 
     print matchObj 

출력 :

<something>NEWWORD</something> 

<blah>UNTOUCH</blah> 

또한 파이썬 방법으로 사용할 수 있습니다. ElementTree XML API

관련 문제