2016-08-04 2 views
0

몇 가지 도움이 필요합니다. 명령의 출력이 있으며 시간 만 추출해야합니다 (예 : "10:57:09").Regex in Perl 사용 방법

명령은 다음과 같습니다 tail -f /var/log/sms

명령 출력 :

Thu 2016/08/04 10:57:09 gammu-smsd[48014]: Read 0 messages 

나는 펄에서이 작업을 수행하고 당신에게

답변

0

펄 코드 감사 변수

에 결과를 넣을 수있는 방법 :

$txt = "Thu 2016/08/04 10:57:09 gammu-smsd[48014]: Read 0 messages"; 
$txt =~ /(\d{2}:\d{2}:\d{2})/; 
print $1; # result of regex 
print "\n"; # new line 
01 23,516,

그리고 그것은 인쇄 :

10:57:09 

결과로 인해 캡처 괄호에, $1라는 변수로 이동합니다. 더 많은 것이 있었다면 캡처는

편집 ... 자신의 캡처 된 텍스트가 INT $2, $3 등을 넣어 것 괄호

위의 스크립트에서 사용 콘솔에서 라인을 읽으려면 :

$txt = <STDIN>; 

스크립트가 myscript.pl이라면 다음과 같이 실행하십시오.

tail -f /var/log/sms | myscript.pl 
+0

는 .... 나는에 꼬리 -f는/var/log/SMS를 실행 coud 방법 단지 더 많은 일을해야합니다 스크립트 perl은 txt를 얻는가 ?? – wael

+0

@ wael : [내 대답] (http://stackoverflow.com/a/38762344/7231)을 참조하십시오. 그러나 정말로, 이것은 모든 기본적인 것들입니다. [Perl 서적] (http : //learn.perl.org/books /) 또는 이것을 수행하기 전에 [Perl 자습서] (http://perl-tutorial.org/)를 가져 가야합니까? –

+0

@wael anser에게 내 편집보기 –

0

일반적으로 답을하기 전에 문제를 직접 풀려고한다는 증거를 보여줄 것으로 기대합니다.

문자열이 정규 표현식과 일치하는지 확인하려면 일치 연산자 (m/.../)를 사용하십시오. m은 종종 생략되어 있으므로 /.../이라고 쓰여 있습니다. 기본적으로 변수는 $_과 일치하지만 바인딩 연산자 인 =~을 사용하여 변경할 수 있습니다. 정규식에 괄호 ((...))가 포함 된 경우 정규식의 해당 섹션과 일치하는 항목은 $1 (및 후속 괄호 세트는 $2, $3 등)에 저장됩니다. 이러한 "캡처 된"값은 목록 컨텍스트에서 평가 될 때 일치 연산자에 의해 반환됩니다.

매치 연산자의 반환 값을 확인하는 것이 좋습니다. 매치가 실패한 경우 다른 액션을 취하는 것이 좋습니다.

일치 연산자에 대한 자세한 내용은 perldoc perlop을, Perl의 정규식 지원에 대한 자세한 내용은 perldoc perlre을 참조하십시오.

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

$_ = 'Thu 2016/08/04 10:57:09 gammu-smsd[48014]: Read 0 messages'; 

if (my ($time) = /(\d\d:\d\d:\d\d)/) { 
    say "Time is '$time'"; 
} else { 
    say 'No time found in string'; 
} 

그리고 당신의 외부 프로세스에서 데이터를 얻을 수는 ...

작동
#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

open my $tail_fh, 'tail -f /var/log/sms |' or die $!; 
while (<$tail_fh>) { 
    if (my ($time) = /(\d\d:\d\d:\d\d)/) { 
    say "Time is '$time'"; 
    } else { 
    say 'No time found in string'; 
    } 
} 
+0

이 스크립트를 시도했지만 막혔습니다. 결과가 표시되지 않습니다. – wael

+0

맞습니다. 내 코드가 너무 단순했다. 이제 해결되었습니다. –

+1

[누군가 내 질문에 답변하면 어떻게해야합니까?] (http://stackoverflow.com/help/someone-answers). 질문에 대한 답변을 수락하지 않은 것 같습니다. 그렇게하지 않으면 사람들은 결국 당신을 돕지 않을 것입니다. –