2011-10-14 3 views
1

쉘 스크립트를 파이썬 코드로 변환하려고하는데이 작업을 시도하는 동안 멈추었습니다.텍스트 파일에서 문자열을 찾고 그 전후에 줄을 인쇄하는 방법

나는 텍스트 파일을 출력하는 과정은, 파일이 같은 섹션이 있습니다

Running Operation kdasdakdnaskdaksdma 

(error if present) error: kdmakmdasmdaksom 

이 파일 (작동 및 오류에 대한 여러 줄을 미칠 수있는 경우, 그렇지 않으면 다음 줄은 것 다른 작업이 있음). 각 블록 이후에 항상 crlf가 있습니다.

"오류 :"가 포함 된 줄을 찾기 위해 파일을 검사하고 오류 및 오류의 세부 사항을 초래 한 작업을 읽으므로 텍스트 파일에서 추측하여 저장하십시오 오류 로그 파일에.

지금까지 나는이 간단한 코드로 "오류 :"가있는 행을 찾을 수 있지만 어떻게 실제로 선을 인쇄하지 않는지 예제를 찾을 수 없습니다. 오류 메시지가 들어 있지만 "error :"가있는 행의 앞뒤에 오는 행.

awk 또는 grep을 사용하는 것이 간단하지만 Python을 사용하는 방법에 대해서는 잘 모르겠습니다. 이것은 내가 지금까지 가지고있는, 오류가있는 줄을 인쇄 할 수 있지만 그 전에 인쇄 된 줄을 제어 할 싶습니다 동안 그냥 인쇄합니다.

import re 

fh = open('~/logs_output.txt') 

for line in fh: 
    if "error:" in line: 
     print line 

는 파이썬에서 RE 모듈을보고 시도, 또한 문자열 모듈,하지만 지금까지 나는 여기서 당신이 할 수있는 당신은 예를 들어, AWK와 함께 무엇을 할 것이라고 내가 할 수있는 것이 아무것도 발견하지 않았습니다 특정 문자열의 발생을 확인한 다음 인쇄를 켜고 수행하면 해제하십시오.

이 문제를 해결하려면 올바른 방향을 제시해 줄 수 있습니까? 감사!

답변

1
import re 


ss = '''qhvfgbhgozr 
yytuuuyuyuuuyuyuuyy 
jhfg tryy error jjfkhdjhfjh ttrtr 
aaaeeedddeedaeaeeaeeea 
jhzdgcoiua zfaozifh cohfgdyg fuo''' 

regx = re.compile('^(.*)\r?\n(.*?error.*)\r?\n(.*)', re.MULTILINE) 

print regx.search(ss).groups() 

결과는 구글 검색에

('yytuuuyuyuuuyuyuuyy', 'jhfg tryy error jjfkhdjhfjh ttrtr', 'aaaeeedddeedaeaeeaeeea') 
+0

감사합니다. 당신이 쓴 RE의 의미에 대한 힌트를 좀 친절하게 주시겠습니까? 그래서 전 또는 후에 첫 번째 줄 이상을 필요로 할 경우에 대비하여 수정할 수 있습니다 (경우에 따라서는 여러 줄로 된 CRLF가있는 여러 줄이 있으므로이 첫 줄을 얻습니다.) 감사합니다. ! –

0

당신은 자신의 목적에 맞게 재사용이 가능해야합니다.

또한 "python awk"로 검색하면 results이 표시되어 도움이 될 것입니다.

+2

링크는 답변으로 게시 할 수 없습니다. 검색 결과에 유용한 정보가 있으면 그것을 설명하고 여기에 링크하십시오. Google 검색은 Stack Overflow의 결과를 보여 주며 반대의 경우도 마찬가지입니다. – agf

관련 문제