我有一个日志文件,我希望只提取两次重复多次的模式
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 ":".
答案 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:
并关闭]