2016-08-04 7 views
0

私はいくつかの助けが必要です。私はコマンドからの出力を持っており、出力から "10:57:09"という時間だけを抽出する必要があります。RegexをPerlで使用する方法

コマンドは次のとおりです。tail -f /var/log/sms

コマンドの出力:

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

私はperlでこれを実行し、変数

に結果を入れることができますどのようにあなたの

答えて

0

Perlコードをありがとう:

$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 

そして、それは印刷します。

10:57:09 

結果がキャプチャ括弧による$1という変数になります。以上が存在していたキャプチャが

EDIT ...自分の撮影したテキストがint $2$3などを入れているだろうかっこ

上記のスクリプトで使用し、コンソールから行を読み込むために:

$txt = <STDIN>; 

さて、そのようtailを実行し、スクリプトがmyscript.plと呼ばれているとします

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

それが動作する....私はには、tail -fは/ var/log/SMSを実行coudどのようにちょうどより多くの事を必要としますtxtを取得するスクリプトperl? – wael

+0

@wael:[私の答え](http://stackoverflow.com/a/38762344/7231)を参照してください。しかし、実際には、これはかなり基本的なものです。あなたは[Perlの本](http://learn.perl。org/books /)、またはこれを実行しようとする前に[Perl tutorials](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)あなたはあなたの質問に対する答えを受け入れたようには見えません。あなたがそれをしないと、結局人々はあなたを助けてくれるでしょう。 –

関連する問題