示例日志,
2016-03-29 10:57:28 UTC 642 [31871] INFO节点信息: {" datacenter":" TEST-DC"," infraType":" saas"," service":&# 34融合&#34 ;, " extraInfo":{" systemType":" secondary-ha1"," tenantType":" sales", " tenantName":" sale1"}
我想阅读" tenantName":" sale1"我需要的最后一个字符串是" sale1"
尝试使用awk并在Perl脚本中切入但没有解决任何建议和/或提示会很明显
我从@Sobrique
得到了答案使用模块JSON&一览:: MoreUtils
find( \&Count, $logDir);
my @uniqtotal = uniq @totCount;
$totalcount = @uniqtotal;
sub Count {
if( $File::Find::name =~m!$logDir/(.*?)/$pattern! and -f $File::Find::name ) {
my $jsonLine = `grep 'tenantName' $File::Find::name`;
if ($jsonLine ne "") {
$jsonLine =~ m/(\{.*\})/ ;
my $json_text = $1;
my $json = decode_json ( $json_text );
push @totCount, $json -> {extraInfo} -> {tenantName};
}
}
}
答案 0 :(得分:1)
这是JSON,因此最好解析为JSON。
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
while ( <> ) {
my ( $json_text ) = m/(\{.*\})/;
my $json = decode_json ( $json_text );
print $json -> {extraInfo} -> {tenantName};
}
或者简化为一个衬垫,因为这是需要做的事情:
perl -MJSON -ne 'print decode_json (/(\{.*\})/ && $1)->{extraInfo}{tenantName}'
答案 1 :(得分:0)
SELECT CASE WHEN (select max(rank) from my_table where usage='L') >= 100
或grep -oP 'tenantName": "\K[^"]+' inputfile
sale1
:
sed
Exaplanation:
sed -r 's/.*"tenantName": "([^"]+).*/\1/g' inputfile
sale1
:grep
标志只会打印字符串的匹配部分而不是整行。
-o
标记将为-P
启用perl
正则表达式。
grep
:意味着忘记左边的一切。