从linux中的日志文件中提取模式

时间:2015-06-14 20:32:56

标签: linux shell

我有一个日志文件,我希望只提取两次重复多次的模式

  

ChannelRequestDailyLog.log.2015-06-05:INFO [Thread-9290]   (ChannelRequestDailyLog.java:174) - ::   [IID:11] [RNW:TR] [RQRVT:1433477166808] [RQLGT:1433477167203] [RQID:4945] [STV:RC] [RQST:USSD] [RQS:USSD] [RQEXT:1433477167203] [SUID:TRNP0000185881] [SUN:727862315] [SC:新   POS] [SM:727862315] [SNW:TR]的 [TID:R150605.0606.110013] [TS:200] [E:空] [RM:728128482] [AMT:100] [SST:1 ] [RID:INTID00016]的 [VAL:49 ] [TOP:0] [COS:0] [PROMO:0] [TOPENQ:0] [PROMOENQ:0] [COSENQ:0] [POSTVAL :0] [PPT:346] [RTT:395]

我希望看到的模式是TID: and VAL: along with the text after ":".

2 个答案:

答案 0 :(得分:0)

使用可以使用perl:

my $string =  <STDIN>;
chomp $string;
@arr = $string =~ /\[((?:TID|VAL):[\w.]*)\]/g;
$arr_len = scalar @arr;
for ( $i=0; $i<$arr_len; $i=$i+1){
    print "$arr[$i]\n";
}

输出:

TID:R150605.0606.110013
VAL:49

答案 1 :(得分:0)

将Perl正则表达式与grep:

一起使用

TID

grep -oP "(?<=\[)TID:[^:]*(?=\])" filepath

输出:

TID:R150605.0606.110013

VAL

grep -oP "(?<=\[)VAL:[^:]*(?=\])" filepath

输出:

VAL:49

如果你想同时获得(TID和VAL),那么:

grep -oP "(?<=\[)(TID|VAL):[^:]*(?=\])" filepath

注意:假设在:后关闭TID:并关闭]