정규 표현식의 MSI Afterburner 로그 파일 마지막 줄에서 특정 숫자를 가져와야 합니다.

정규 표현식의 MSI Afterburner 로그 파일 마지막 줄에서 특정 숫자를 가져와야 합니다.

정규식에 대해서는 아무것도 모르지만 다음과 같이 인쇄되는 로그의 마지막 줄에서 값을 선택할 수 있어야 합니다.

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,405.000 

이 인스턴스에서 354.000(100에서 9999 사이의 숫자)이 있는 지점을 잡는 정규식이 필요합니다. 다음과 같습니다.

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,**354**.000             ,405.000 

이 인스턴스에서 405가 있는 지점을 잡는 정규식은 다음과 같습니다.

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,**405**.000 

내 컴퓨터의 정보를 외부 LCD 화면에 표시하기 위해 CrystalControl2라는 프로그램을 사용하고 있습니다. 텍스트 파일이나 HTML 페이지에서 정보를 가져오기 위해 프로그램에 내장된 도구에는 필터링되지 않은 소스 정보에서 결과를 가져오는 정규 표현식이 필요합니다.

보다 구체적으로 말하면 로그 파일은 내가 초당 한 번씩 강조 표시한 위치에 GPU 코어 클럭과 메모리 클럭이 포함된 텍스트 파일에 한 줄을 추가합니다. 업데이트된 값을 가져와 CrystalControl2를 통해 LCD 화면의 필드에 표시하고 싶습니다. CrystalControl2에서 더 쉽게 액세스할 수 있는 다른 소프트웨어를 설치하지 않고 이러한 값을 얻으려고 노력하고 있습니다. 이를 통해 소프트웨어 충돌을 피하고 LCD에 표시하려는 모든 정보를 참조하기 위해 몇 가지 다른 프로그램을 실행할 수 있습니다.

말씀드린 대로 이 숫자는 3자리 또는 4자리 숫자일 수 있습니다. 이게 과연 가능할까요?

답변1

따라서 분명히 CrystalControl2 정규식 형식에 대한 문서가 심각하게 부족합니다. 하지만 제가 본 내용을 종합해보면매우내가 찾을 수 있는 몇 가지 예는 그룹화를 사용하여 필요한 텍스트를 추출합니다. 일부는 다른 것보다 더 많은 그룹을 가지고 있는데 그 이유가 명확하지 않았습니다. 그러나 MSI Afterburner 로그의 숫자와 일치하는 정규식에 균열이 있습니다.

\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$

어떻게?

그럼 이것을 분해해 보겠습니다. 줄 끝 앵커( $) 가 있으므로 끝부터 뒤로 작업합니다.

  1. $- 줄 끝부분에 고정합니다.

    예제를 보면 이것이 파일 끝에 고정되는 것처럼 보였습니다.

  2. [^,]*- 0개 이상의 항목과 일치하지만쉼표

  3. \.- 점(소수점)과 일치합니다.

    정규식에서 특별하고 무엇이든 일치하는 것을 의미하기 때문에 필요 \합니다 . .그것은 \단지 점으로 만듭니다.

  4. (\d+)- 하나 이상의 숫자를 일치시키고 ().

    그룹에서는 일치 결과를 추출할 수 있습니다.

  5. ,[^0-9,]*- 0개 이상의 숫자가 아닌 숫자나 쉼표가 뒤에 오는 쉼표와 일치합니다.

  6. \.[^,]*- 점 뒤에 쉼표가 아닌 0개 이상의 점을 찾습니다.

  7. \D+(\d+)- 하나 이상의 숫자가 아닌 숫자 뒤에 하나 이상의 숫자가 오는 것을 찾아 숫자를 그룹화합니다.

테스트:

LCD나 해당 SW에 접근할 수 없기 때문에 Perl을 사용하여 다음과 같이 테스트했습니다.

cat file1 | perl -lpe 's/\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$/:::: \1 xxx \2/'

시험 결과:

80, 21-06-2017 20:42:27, 16.000:::: 1392 xxx 4714
80, 21-06-2017 20:42:28, 6.000:::: 860 xxx 810
80, 21-06-2017 20:42:29, 7.000:::: 860 xxx 810
80, 21-06-2017 20:42:30, 7.000:::: 354 xxx 405

:::따라서 정규 표현식은 과 사이에서 볼 수 있듯이 줄의 마지막 두 숫자를 찾았습니다.xxx

댓글에서 결과 업데이트

결과

답변2

글쎄, 당신은 무엇을 시도 했습니까?

나는 한 번 살펴 보는 것이 좋습니다NimbleText, 사용하기 매우 쉽습니다.

귀하의 문제를 완전히 이해하지 못했지만 추가 도움을 주기 위해 여기에 스니펫을 만들었습니다.

http://nimbletext.com/Live/-176683481/

<% ($3 > 100 && $3 < 9999) ? $3 : '' %> | <% ($4 > 100 && $4 < 9999) ? $4 : '' %>

도움이 되었기를 바랍니다

관련 정보